
關(guān)于三個工具,ps,pstree和kill
在linux中ps是一個極為重要的工具,它用于查看我們我們系統(tǒng)中的進程,包括用戶進程和系統(tǒng)進程。同時,我們可以通過選擇只查看部分進程信息。pstree將進程以樹狀結(jié)構(gòu)顯示出來,便于我們觀察父子進程以及進程與線程之間的狀態(tài)。kill的作用是給進程發(fā)送信號,可以是進程終斷,停止,運行,死亡等。
查看進程工具之PS
ps命令用于報告當前系統(tǒng)的進程狀態(tài)??梢源钆?code>kill指令隨時中斷、刪除不必要的程序。ps命令是最基本同時也是非常強大的進程查看命令,使用該命令可以確定有哪些進程正在運行和運行的狀態(tài)、進程是否結(jié)束、進程有沒有僵死、哪些進程占用了過多的資源等等,總之大部分信息都是可以通過執(zhí)行該命令得到的。
??作為一個強大的進程管理工具,支持的選項自然是不少,在早期的UNIX和后來的BSD版本的UNIX以及現(xiàn)在的linux系統(tǒng)中,都有ps這個工具,所以,ps工具支持這三個系列的選項。包括UNIX的短格式選項,如-A,-a;BSD的字母選項,如a,d等;還有GNU的長格式選項,如--help。這三個系列的選項是有所不同的,我們將一些常用的選項進行介紹。
進程的屬性
- USER:進程所有者
- PID:進程id
- %CPU:CPU使用情況
- %MEM:內(nèi)存使用情況
- VSZ:Virtual memory SiZe,虛擬內(nèi)存集,線性內(nèi)存
- RSS: ReSident Size, 常駐內(nèi)存集(即使用的真是內(nèi)存)
- TTY:終端接口(守護進程顯示?)
- START:進程啟動時間
- TIME:占用CPU資源總時間
- COMMAND:開啟的進程
- STAT:進程狀態(tài)
- R: running
- S: interruptable sleeping 可中斷的睡眠進程
- D: uninterruptable sleeping 不可終斷的睡眠進程
- T: stopped 停止的進程
- Z: zombie 僵尸進程
- +: 前臺進程
- l: 多線程進程
- L:內(nèi)存分頁并帶鎖
- N:低優(yōu)先級進程
- <: 高優(yōu)先級進程
- s: session leader,會話(子進程)發(fā)起者
BSD格式
ps 默認顯示當前終端中的進程
選項:
a 選項包括所有終端中的進程
x 選項包括不連接終端的進程
u 選項顯示進程所有者的信息
f 選項顯示進程的父進程
o 屬性 選項顯示定制屬性
k attr 對屬性排序
attr包括:pid,comm,%cpu,%mem,state,tty,euser(有效用戶ID),ruser(真實用戶ID)
UNIX格式
常用組合:-ef
-e: 顯示所有進程
-f: 顯示完整格式程序信息
常用組合: -eFH
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關(guān)信息
常用組合:自定義
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
-axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
其他屬性
我們在使用定制屬性時,還可以查看一些其他屬性,如:
ni: nice值
pri: priority 優(yōu)先級
psr: processor CPU編號
rtprio: 實時優(yōu)先級
比如:
ps axo pid,cmd,psr,ni,pri,rtprio
pgrep
命令:pgrep [options] pattern
選項:
-u uid: effective user,生效者
-U uid: real user,真正發(fā)起運行命令者
-t terminal: 與指定終端相關(guān)的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
[root@CT731 ~]#pgrep -a httpd
35612 /usr/sbin/httpd -DFOREGROUND
35614 /usr/sbin/httpd -DFOREGROUND
35615 /usr/sbin/httpd -DFOREGROUND
35616 /usr/sbin/httpd -DFOREGROUND
[root@CT731 ~]#pgrep -l sshd
1444 sshd
45239 sshd
109464 sshd
[root@CT731 ~]#pgrep -a -U root httpd
35612 /usr/sbin/httpd -DFOREGROUND
除此之外我么還可以使用 pidof bash 直接查看此進程的pid。
[pidof]還有一些其他選項。
-s:僅返回一個進程號;
-c:僅顯示具有相同“root”目錄的進程;
-x:顯示由腳本開啟的進程;
-o:指定不顯示的進程ID。
當指定-s時,只顯示最后一個子進程PID
[root@CT731 ~]#pidof httpd
35622 35621 35620 35618 35617 35616 35615 35614 35612
[root@CT731 ~]#pidof -s httpd
35622
查看進程樹pstree
pstree命令以樹狀圖的方式顯示出進程之間的關(guān)系,顯示效果比較直觀。
命令:pstree
選項:
-a:顯示每個程序的完整指令,包含路徑,參數(shù)或是常駐服務(wù)的標示;
-c:不使用精簡標示法;
-h:列出樹狀圖時,特別標明現(xiàn)在執(zhí)行的程序;
-l:采用長列格式顯示樹狀圖;
-p:顯示程序識別碼;
-u:顯示用戶名稱;
在這個命令中,我們最常使用的就是pstree -p來查看我們的進程樹和它們的PID
向進程發(fā)送信號kill
向進程發(fā)送控制信號,以實現(xiàn)對進程管理,每個信號對應(yīng)一個數(shù)字,信號名稱以SIG開頭(可省略), 不區(qū)分大小寫。如果我們想要查看當前進程的可用信號可以使用kill –l或者trap –l,常用的信號我們可以使用使用man 7 kill來進行查看。
命令格式:
kill [-s signal|-p] [-q sigval] [-a] [--] pid...
命令信號:
1/SIGHUP: 無須關(guān)閉進程而讓其重讀配置文件
2/SIGINT: 中止正在運行的進程;相當于Ctrl+c
3/SIGQUIT:相當于ctrl+
9/SIGKILL: 強制殺死正在運行的進程
15/SIGTERM:終止正在運行的進程
18/SIGCONT:繼續(xù)運行
19/SIGSTOP:后臺休眠
指定信號的方法:
??(1) 信號的數(shù)字標識: 1, 2, 9
??(2) 信號完整名稱: SIGHUP
??(3) 信號的簡寫名稱: HUP
我們一般給進程發(fā)送信號的方法是kill [-SIGNAL] pid,比如:
kill –n 9 pid 或者 kill -9 pid 強制殺死該進程
kill –s HUP pid 重新讀取配置文件
除了使用pid來對進程發(fā)信號以外,我們還可以使用按照進程名稱的方式給進程發(fā)信號。
killall [-SIGNAL] process_name(默認殺死該名稱的所有進程)
如:
[root@CT731 ~]#killall -9 httpd
[root@CT731 ~]#pgrep -a httpd
[root@CT731 ~]#
進程被殺死,找不到進程
pkill
我們還可以按照通過匹配到的模式來對進程發(fā)信號
命令:pkill [options] pattern
選項:
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正發(fā)起運行命令者
-t terminal: 與指定終端相關(guān)的進程
-l: 顯示進程名(pgrep可用)
-a: 顯示完整格式的進程名(pgrep可用)
-P pid: 顯示指定進程的子進程
[root@CT731 ~]#pkill -9 `pidof sleep`