ps 命令詳解

 

有時候系統管理員可能只關心如今系統中運行着哪些程序,而不想知道有哪些進程在運行。因爲一個應用程序可能須要啓動多個進程。因此在同等狀況下,進程的數 量要比程序多的多。爲此從閱讀方面考慮,管理員須要知道系統中運行的具體程序。要實現這個需求的話,就須要利用命令ps來幫忙。
要對進程進行監測和控制,首先必需要了解當前進程的狀況,也就是須要查看當前進程,而 ps 命令就是最基本同時也是很是強大的進程查看命令。使用該命令能夠肯定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多 的資源等等。總之大部分信息都是能夠經過執行該命令獲得的。

session

 




名稱:ps
使用權限:全部使用者
使用方式:ps [options] [--help]
說明:顯示瞬間行程 (process) 的動態
參數:ps的參數很是多, 在此僅列出幾個經常使用的參數並大略介紹含義
-A    列出全部的進程
-w    顯示加寬能夠顯示較多的資訊
-au    顯示較詳細的資訊
-aux    顯示全部包含其餘使用者的行程

############################################################

經常使用參數:

-A 顯示全部進程(等價於-e)(utility)
-a 顯示一個終端的全部進程,除了會話引線
-N 忽略選擇。
-d 顯示全部進程,但省略全部的會話引線(utility)
-x 顯示沒有控制終端的進程,同時顯示各個命令的具體路徑。dx不可合用。(utility)
-p pid 進程使用cpu的時間
-u uid or username 選擇有效的用戶id或者是用戶名
-g gid or groupname 顯示組的全部進程。
U username 顯示該用戶下的全部進程,且顯示各個命令的詳細路徑。如:ps U zhang;(utility)
-f 所有列出,一般和其餘選項聯用。如:ps -fa or ps -fx and so on.
-l 長格式(有F,wchan,C 等字段)
-j 做業格式
-o 用戶自定義格式。
v 以虛擬存儲器格式顯示
s 以信號格式顯示
-m 顯示全部的線程
-H 顯示進程的層次(和其它的命令合用,如:ps -Ha)(utility)
e 命令以後顯示環境(如:ps -d e; ps -a e)(utility)
h 不顯示第一行

############################################################

ps命令經常使用用法(方便查看系統進程)

1)ps a 顯示現行終端機下的全部程序,包括其餘用戶的程序。
2)ps -A 顯示全部進程。
3)ps c 列出程序時,顯示每一個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
4)ps -e 此參數的效果和指定"A"參數相同。
5)ps e 列出程序時,顯示每一個程序所使用的環境變量。
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。
7)ps -H 顯示樹狀結構,表示程序間的相互關係。
8)ps -N 顯示全部的程序,除了執行ps指令終端機下的程序以外。
9)ps s 採用程序信號的格式顯示程序情況。
10)ps S 列出程序時,包括已中斷的子程序資料。
11)ps -t<終端機編號>  指定終端機編號,並列出屬於該終端機的程序的情況。
12)ps u  以用戶爲主的格式來顯示程序情況。
13)ps x  顯示全部程序,不以終端機來區分。
最經常使用的方法是ps -aux,而後再利用一個管道符號導向到grep去查找特定的進程,而後再對特定的進程進行操做。

############################################################

運行 ps aux 的到以下信息:

root:# ps aux
USER      PID       %CPU    %MEM    VSZ    RSS    TTY    STAT    START    TIME    COMMAND
smmsp    3521    0.0    0.7    6556    1616    ?    Ss    20:40    0:00    sendmail: Queue runner@01:00:00 f
root    3532    0.0    0.2    2428    452    ?    Ss    20:40    0:00    gpm -m /dev/input/mice -t imps2
htt    3563    0.0    0.0    2956    196    ?    Ss    20:41    0:00    /usr/sbin/htt -retryonerror 0
htt    3564    0.0    1.7    29460    3704    ?    Sl    20:41    0:00    htt_server -nodaemon
root    3574    0.0    0.4    5236    992    ?    Ss    20:41    0:00    crond
xfs    3617    0.0    1.3    13572    2804    ?    Ss    20:41    0:00    xfs -droppriv -daemon
root    3627    0.0    0.2    3448    552    ?    SNs    20:41    0:00    anacron -s
root    3636    0.0    0.1    2304    420    ?    Ss    20:41    0:00    /usr/sbin/atd
dbus    3655    0.0    0.5    13840    1084    ?    Ssl    20:41    0:00    dbus-daemon-1 --system


Head標頭:

USER    用戶名
UID    用戶ID(User ID)
PID    進程ID(Process ID)
PPID    父進程的進程ID(Parent Process id)
SID    會話ID(Session id)
%CPU    進程的cpu佔用率
%MEM    進程的內存佔用率
VSZ    進程所使用的虛存的大小(Virtual Size)
RSS    進程使用的駐留集大小或者是實際內存的大小,Kbytes字節。
TTY    與進程關聯的終端(tty)
STAT    進程的狀態:進程狀態使用字符表示的(STAT的狀態碼)
R 運行    Runnable (on run queue)            正在運行或在運行隊列中等待。
S 睡眠    Sleeping                休眠中, 受阻, 在等待某個條件的造成或接受到信號。
I 空閒    Idle
Z 僵死    Zombie(a defunct process)        進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放。
D 不可中斷    Uninterruptible sleep (ususally IO)    收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生。
T 終止    Terminate                進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後中止運行運行。
P 等待交換頁
W 無駐留頁    has no resident pages        沒有足夠的記憶體分頁可分配。
X 死掉的進程
< 高優先級進程                    高優先序的進程
N 低優先    級進程                    低優先序的進程
L 內存鎖頁    Lock                有記憶體分頁分配並縮在記憶體內
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 相似 NPTL pthreads)
+ 位於後臺的進程組 
START    進程啓動時間和日期
TIME    進程使用的總cpu時間
COMMAND    正在執行的命令行命令
NI    優先級(Nice)
PRI    進程優先級編號(Priority)
WCHAN    進程正在睡眠的內核函數名稱;該函數的名稱是從/root/system.map文件中得到的。
FLAGS    與進程相關的數字標識

############################################################

例子:
查看當前系統進程的uid,pid,stat,pri, 以uid號排序.
ps -eo pid,stat,pri,uid –sort uid

查看當前系統進程的user,pid,stat,rss,args, 以rss排序.
ps -eo user,pid,stat,rss,args –sort rss

############################################################

ps 爲咱們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;若是想對進程時間監控,應該用 top 工具。


一、ps 的參數說明:

ps 提供了不少的選項參數,經常使用的有如下幾個:

l 長格式輸出;
u 按用戶名和啓動時間的順序來顯示進程;
j 用任務格式來顯示進程;
f 用樹形格式來顯示進程;

a 顯示全部用戶的全部進程(包括其它用戶);
x 顯示無控制終端的進程;
r 顯示運行中的進程;
ww 避免詳細參數被截斷;

咱們經常使用的選項是組合是 aux 或 lax,還有參數 f 的應用。


二、ps aux 或 lax 輸出的解釋:

USER 進程的屬主;
PID 進程的ID;
PPID 父進程;
%CPU 進程佔用的CPU百分比;
%MEM 佔用內存的百分比;
NI 進程的NICE值,數值大,表示較少佔用CPU時間;
VSZ 進程虛擬大小;
RSS 駐留中頁的數量;
TTY 終端ID
STAT 進程狀態(有如下幾種)
D 沒法中斷的休眠狀態(一般 IO 的進程);
R 正在運行可中在隊列中可過行的;
S 處於休眠狀態;
T 中止或被追蹤;
W 進入內存交換(從內核2.6開始無效);
X 死掉的進程(歷來沒見過);
Z 殭屍進程;

< 優先級高的進程
N 優先級較低的進程
L 有些頁被鎖進內存;
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 相似 NPTL pthreads);
+ 位於後臺的進程組;
WCHAN 正在等待的進程資源;
START 啓動進程的時間;
TIME 進程消耗CPU的時間;
COMMAND 命令的名稱和參數;


三、應用舉例:

[root@localhost ~]# ps -aux |more
能夠用 | 管道和 more 鏈接起來分頁查看。
[root@localhost ~]# ps -aux > ps001.txt
把結果輸出到ps001.txt文本中並保存。
[root@localhost ~]# more ps001.txt
這裏是把全部進程顯示出來,並輸出到ps001.txt文件,而後再經過more 來分頁查看。


四、kill 終止(殺死)進程,有十幾種控制進程的方法,下面是一些經常使用的方法:
[root@localhost ~]#kill -STOP [pid]
發送SIGSTOP (17,19,23)中止一個進程,而並不消滅這個進程。
[root@localhost ~]#kill -CONT [pid]
發送SIGCONT (19,18,25)從新開始一箇中止的進程。
[root@localhost ~]#kill -KILL [pid]
發送SIGKILL (9)強迫進程當即中止,而且不實施清理操做。
[root@localhost ~]#kill -9 -1
終止你擁有的所有進程。
SIGKILL 和 SIGSTOP 信號不能被捕捉、封鎖或者忽略,可是,其它的信號能夠。因此這是你的終極武器。

############################################################

利用ps命令向管理員報告執行中的程序:

有時候系統管理員可能只關心如今系統中運行着哪些程序,而不想知道有哪些進程在運行。因爲一個應用程序可能須要啓動多個進程。所在在同等狀況下,進程的數 量要比程序多的多。爲此從閱讀方面考慮,管理員須要知道系統中運行的具體程序。要實現這個需求的話,就須要利用命令ps來幫忙。

1、ps命令顯示結果的含義。

當須要查看系統中執行的程序時,雖然ps 命令不是惟一的命令,但絕對是使用的最頻繁的命令。以下圖所示,就是執行ps命令後顯示的結果。

在命令行中輸入命令ps,就能夠顯示系統中當前運行的全部應用程序。如上圖所示,若是輸入ps命令,其顯示結果主要有四部份內容。首先是PID,這是程序 的ID號。才做系統就是利用這個ID號來惟一的標識應用程序,而不是利用命令來辨認。當須要強制關閉應用程序時,就須要用到這個PID號碼。其次是 TTY,這個字段表示用戶使用的終端代碼。Pts表示用戶是採用遠程登陸的。第三個參數TIME表示這個程序所消耗的CPU時間,注意這個時間不是程序開 始運行的時間。最後一個參數CMD就表示程序的名字。

2、讓系統報告詳細的信息。

在使用ps命令時,若是不採用任何的可選項,則其顯示的信息是很是有限的,並且每每只顯示當前用戶所運行的程序。當系統管理員須要知道應用程序更加詳細的 運行信息時,如想要知道這個應用程序內存、CPU的佔用率狀況時,那麼就須要加入一些可選項。如系統管理員須要一併查看其它用戶所執行的應用程序時,就需 要在這個命令後面採用可選項-al。如此的話,系統會列出系統中全部用戶運行的全部程序。如想要知道某個程序CPU與內存的使用狀況,而不是隻簡單的現實 其CPU的使用時間,那麼就須要在這個命令後面加入參數-l ,即便用ps –l命令可讓系統顯示出應用程序的詳細運行信息。關於上面各個字段所表明的含義,你們如有興趣的話能夠查看相關的幫助。通常來講,系統管理員關心的只是 程序的PID號碼、內存與CPU的使用率、命令的名字、用戶採用的終端等等。其它的信息對於系統管理員來講價值不是很大。

3、查看後臺運行的程序。

默認狀況下,ps命令只顯示前臺運行的程序,而不會顯示後臺運行的程序。可是並不是全部的程序都是在前臺運行。正常狀況下,隱藏在後臺運行的程序數量要比前 臺運行的程序多的多。如隨着操做系統啓動而啓動的很多系統自帶程序,其運行的方式都是後臺運行。並且有時候,系統出現問題每每是因爲後臺程序所形成的。如 常見的木馬等程序都是在後臺所運行的。爲此係統管理員相對來講,更加想要知道在後臺運行着哪些程序。

若是要查看後臺運行的程序,那就比較複雜一點。由於在不一樣版本的Linux操做系統中,要顯示後臺進程其所採用的可選項是不一樣的。如在紅帽子 Linux操做系統中,其實採用參數的形式而不是可選項。即採用ps aux命令能夠顯示出全部的應用程序(包括前臺與後臺的)。參數與可選項的差別主要在前面又沒有這個-符號。若是帶有這個符號的就表示這是一個可選項。而 若是不帶的,就表示這事一個參數。這個符號通常狀況下可不可以省。在該寫的地方沒寫,或者不須要些的地方恰恰加上了,則系統都會提示錯誤信息,說找不到這 個命令。而在其它的Linux系統版本中,可能不可以識別這個aux參數。如在一些Linux操做系統版本中,須要採用-a可選項來完成這個任務。因爲系 統版本之間的差別,給系統管理員帶來了很多的麻煩。不過值得慶幸的是,各個操做系統版本中都有在線的幫助。若是系統管理員在使用一個新版本的操做系統時, 不知道要顯示所有進程該使用哪一個可選項時,能夠利用ps --heip等命令來查看系統幫助。不過美中不足的是,系統在線幫助都是英文的,對系統管理員的英文水平是一個不小的考驗。不過若是要做Linux系統管 理員,這點英文底子仍是要有的。由於最新的Linux技術基本上都是先出來英文文檔的。其實要掌握最早進的操做系統書籍,大部分的計算機書籍都是英文的。

4、對程序列表進行排序。

當運行的應用程序比較多時,系統管理員須要對應用程序進行排序。Ps命令的排序功能是比較強的。主要是由於這個命令有一個--sort參數(注意在這個參 數前面採用的是兩個小橫杆符號,各位讀者不要覺得是筆者寫錯了)。在這個參數後面加上系統管理員想要的排序字段,就能夠進行排序了。如這個命令ps –A --sort cmd,就表示顯示系統全部的應用程序,並根據程序命令來進行排序。在Linux操做系統參數中,還有一個比較麻煩的事情,就是參數大小寫不一樣每每表明着 不一樣的含義。如上面這個命令,將大寫字母A換成是小寫字符a,則結果就徹底兩樣了。大寫字符A表示全部的應用程序,而小寫字符a則表示「all w/ tty except session leaders」。二者有本質的區別。經過這個差別能夠用來過濾不一樣終端登錄賬戶所運行的應用程序。

在ps命令中,很多參數都有這種狀況。運行ps --help查看這個命令的全部參數,就能夠看到相似的大小寫不一樣表明不一樣含義的狀況還有不少。如大寫字符O與小寫字符o、大寫字符U與小寫字符u等等。 這些差別無形之中增長了系統管理員維護操做系統的難度。系統管理員要掌握這麼多的參數以及參數大小寫之間的差別,每每是不可能的。系統管理員除了平時要多 使用使用經常使用的參數來增長值觀的印象,這個系統命令的在線幫助確實也是少不了的。這個系統幫助能夠給管理員使用系統命令提供在線的指導。

5、報告特定程序的運行狀況。

當系統中運行的程序比較多時,經過對程序名字排序能夠幫助管理員找到本身所關心的程序。可是這仍然不是最簡便的方式。如如今系統管理員在其它操做系統中發 現有一個叫作threadx的木馬程序在系統後臺運行。爲此管理員須要在其它電腦上查看是否也有這個木馬程序在運行。此時該如何處理呢?利用排序功能,對 程序的名字進行排序(注意不是對程序的PID進行排序,由於即便程序相同,啓動的時間不一樣或者操做系統中已經啓動程序的數量不一樣,這個PID號碼也就不 同。也就是說這個PID號碼是自動生成的)。這在必定程度上能夠幫助管理員加快程序查找的速度。不過筆者認爲,若是系統管理員可以使用管道符與 grep等查詢命令可能會更快的找到本身所須要的應用程序信息。

如如今系統管理員若使用這個命令ps aux |grep 「threadx」,會出現什麼狀況呢?首先系統會列出當前系統中全部運行的應用程序(包括前臺運行與後臺運行的)。而後將輸出的結果經過管道符號|傳遞 給命令grep。而後命令grep就會在ps命令輸出的結果中查找是否有threadx這個程序運行的信息。若是有的話,則會在窗口中顯示這個程序的信 息,而過濾掉其它應用程序的運行信息。可見採用管道符跟其它查詢命令結合,能夠幫助系統管理員在最短的時間內找到本身想了解的應用程序的信息。

跟一些特殊符號結合還能夠實現一些更加負責的功能。如跟cat命令結合使用能夠統計出符合條件的程序數量。如在命令後面加入>符號,能夠將輸出的結 果定位到一個文件中。如跟通配符結合使用,能夠查詢出知足特定條件的一類程序。如還能夠查詢出某個程序父程序或者其子程序的運行信息等等。ide

相關文章
相關標籤/搜索