ps命令詳解

weixin_34115824發表於2017-11-02

ps的輸出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0  41292  3844 ?        Ss   Jun29   0:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root         2  0.0  0.0      0     0 ?        S    Jun29   0:00 [kthreadd]


ps有兩種風格:BSD和unix linux可混用兩個。



ps的常用選項:


-a:顯示所有終端機下執行的程式,除了階段作業領導者之外。 

a:顯示現行終端機下的所有程式,包括其他使用者的程式。

-A:顯示所有程式。 

-c:顯示CLS和PRI欄位。 

c:列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,選項或常駐服務的標示。 

-C<指令名稱>:指定執行指令的名稱,並列出該指令的程式的狀況。 

-d:顯示所有程式,但不包括階段作業領導者的程式。 

-e:此選項的效果和指定"A"選項相同。 

e:列出程式時,顯示每個程式所使用的環境變數。 

-f:顯示UID,PPIP,C與STIME欄位。 

f:用ASCII字元顯示樹狀結構,表達程式間的相互關係。 

-g<群組名稱>:此選項的效果和指定"-G"選項相同,當亦能使用階段作業領導者的名稱來指定。 

g:顯示現行終端機下的所有程式,包括群組領導者的程式。 

-G<群組識別碼>:列出屬於該群組的程式的狀況,也可使用群組名稱來指定。 

h:不顯示標題列。 

-H:顯示樹狀結構,表示程式間的相互關係。 

-j或j:採用工作控制的格式顯示程式狀況。 

-l或l:採用詳細的格式來顯示程式狀況。 

L:列出欄位的相關資訊。 

-m或m:顯示所有的執行緒。

n:以數字來表示USER和WCHAN欄位。 

-N:顯示所有的程式,除了執行ps指令終端機下的程式之外。 

-p<程式識別碼>:指定程式識別碼,並列出該程式的狀況。 

p<程式識別碼>:此選項的效果和指定"-p"選項相同,只在列表格式方面稍有差異。 

r:只列出現行終端機正在執行中的程式。 

-s<階段作業>:指定階段作業的程式識別碼,並列出隸屬該階段作業的程式的狀況。 

s:採用程式訊號的格式顯示程式狀況。 

S:列出程式時,包括已中斷的子程式資料。 

-t<終端機編號>:指定終端機編號,並列出屬於該終端機的程式的狀況。 

t<終端機編號>:此選項的效果和指定"-t"選項相同,只在列表格式方面稍有差異。 

-T:顯示現行終端機下的所有程式。 -u<使用者識別碼>:此選項的效果和指定"-U"選項相同。

u:以使用者為主的格式來顯示程式狀況。 

-U<使用者識別碼>:列出屬於該使用者的程式的狀況,也可使用使用者名稱稱來指定。 

U<使用者名稱稱>:列出屬於該使用者的程式的狀況。 

v:採用虛擬記憶體的格式顯示程式狀況。 

-V或V:顯示版本資訊。 

-w或w:採用寬闊的格式來顯示程式狀況。  

x:顯示所有程式,不以終端機來區分。 

X:採用舊式的Linux i386登陸格式顯示程式狀況。 

-y:配合選項"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位 。 

-<程式識別碼>:此選項的效果和指定"p"選項相同。 

--cols<每列字元數>:設定每列的最大字元數。 

--columns<每列字元數>:此選項的效果和指定"--cols"選項相同。 

--cumulative:此選項的效果和指定"S"選項相同。 

--deselect:此選項的效果和指定"-N"選項相同。 

--forest:此選項的效果和指定"f"選項相同。 

--headers:重複顯示標題列。 

--help:線上幫助。 

--info:顯示排錯資訊。 

--lines<顯示列數>:設定顯示畫面的列數。 

--no-headers:此選項的效果和指定"h"選項相同,只在列表格式方面稍有差異。 

--group<群組名稱>:此選項的效果和指定"-G"選項相同。 

--Group<群組識別碼>:此選項的效果和指定"-G"選項相同。 

--pid<程式識別碼>:此選項的效果和指定"-p"選項相同。 

--rows<顯示列數>:此選項的效果和指定"--lines"選項相同。 

--sid<階段作業>:此選項的效果和指定"-s"選項相同。 

--tty<終端機編號>:此選項的效果和指定"-t"選項相同。 

--user<使用者名稱稱>:此選項的效果和指定"-U"選項相同。 

--User<使用者識別碼>:此選項的效果和指定"-U"選項相同。 

--version:此選項的效果和指定"-V"選項相同。 

--widty<每列字元數>:此選項的效果和指定"-cols"選項相同。






ps aux

ps -ef

使用"u"或者"-f"選項可以顯示程式的具體資訊。


顯示使用者程式

使用"-u"選項後跟使用者名稱來過濾所屬使用者的程式。多個使用者名稱可以用逗號分隔。

ps -f -u www-data


通過名字或者程式id顯示程式

ps -C apache2

要通過程式id顯示程式,就使用"-p"選項,並且還可以通過逗號分隔來指定多個程式id。

ps -f -p 3150,7298,6544

"-C"必須提供精確的程式名,並且它並不能通過部分名字或者萬用字元查詢。為了更靈活地搜尋程式列表,通常使用grep命令。

ps -ef | grep apache


通過cpu或者記憶體使用排序程式

想要找出那些消耗最多記憶體或者CPU的程式。排序選項會基於特定的欄位或者引數來排序程式列表。

可以用'--sort'指定多個欄位,並用逗號分割。除此之外,欄位前面還可以跟上'-'或者'+'的字首來相應地表示遞減和遞增排序。這裡有很多的用於排序的選項,通過man頁來獲取完整的列表。

ps aux --sort=-pcpu,+pmem

顯示前5名最耗cpu的程式。

ps aux --sort=-pcpu | head -5


以樹的形式顯示程式層級

"--forest" 選項會構造一個ascii藝術形式的程式層級檢視。

下面的命令會用apache2的程式名來搜尋並構造一個樹來顯示具體資訊。

ps -f --forest -C apache2

不要在排序中使用樹狀顯示,因為兩者都會以不同方式影響顯示的順序。


顯示父程式的子程式

ps -o pid,uname,comm -C apache2

使用apache2主程式的pid列出了所有的apache2的子程式。

ps --ppid 2359


顯示程式的執行緒

"-L"選項會隨著程式一起顯示執行緒。它可用於顯示所有指定程式或者所有程式的執行緒。

ps -p 3150 -L


改變顯示的列

下面的命令會只顯示pid、使用者名稱、cpu、記憶體、命令列。

ps -e -o pid,uname,pcpu,pmem,comm


顯示程式執行的時間

執行的時間指的是,程式已經執行的時間。執行時間的列並沒有預設顯示,需要使用-o選項帶入。

ps -e -o pid,comm,etime



將ps轉換為實時程式檢視器

watch命令可將ps命令變成實時程式檢視器

watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'



top/htop命令的輸出相比上面的ps命令重新整理得更頻繁。

這是因為top輸出是結合了cup使用值和記憶體使用值後的排序值。但是上面的ps命令是一個更簡單的行為的排序,每次獲取一列(像學校的數學),因此它不會像top那樣快速更新。














本文轉自ting2junshui51CTO部落格,原文連結:http://blog.51cto.com/ting2junshui/1856864 ,如需轉載請自行聯絡原作者