Linux中的ps指令是Process Status的縮寫。ps指令用來列出系統中目前運作的那些程序。ps指令列出的是目前那些程序的快照,就是執行ps指令的那個時刻的那些程序,如果想要動态的顯示程序資訊,就可以使用top指令。
要對程序進行監測和控制,首先必須要了解目前程序的情況,也就是需要檢視目前程序,而 ps 指令就是最基本同時也是非常強大的程序檢視指令。使用該指令可以确定有哪些程序正在運作和運作的狀态、程序是否結束、程序有沒有僵死、哪些程序占用了過多的資源等等。總之大部分資訊都是可以通過執行該指令得到的。
ps 為我們提供了程序的一次性的檢視,它所提供的檢視結果并不動态連續的;如果想對程序時間監控,應該用 top 工具。
kill 指令用于殺死程序。
linux上程序有5種狀态:
1. 運作(正在運作或在運作隊列中等待)
2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信号)
3. 不可中斷(收到信号不喚醒和不可運作, 程序必須等待直到有中斷發生)
4. 僵死(程序已終止, 但程序描述符存在, 直到父程序調用wait4()系統調用後釋放)
5. 停止(程序收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号後停止運作運作)
ps工具辨別程序的5種狀态碼:
D 不可中斷 uninterruptible sleep (usually IO)
R 運作 runnable (on run queue)
S 中斷 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
ps指令支援三種使用的文法格式
UNIX 風格,選項可以組合在一起,并且選項前必須有“-”連字元
BSD 風格,選項可以組合在一起,但是選項前不能有“-”連字元
GNU 風格的長選項,選項前有兩個“-”連字元
我們能夠混用這幾種風格,但是可能會發生沖突。本文使用 UNIX 風格的ps指令。
常見參數:
-a 顯示同一終端下的所有程式、
-aux 顯示所有包含其他使用者的程序
常見選項組合:
1. 不加參數執行ps指令
這是一個基本的 ps 使用。在控制台中執行這個指令并檢視結果。
不加選項執行ps指令
結果預設會顯示4列資訊。
- PID: 運作着的指令(CMD)的程序編号
- TTY: 指令所運作的位置(終端)
- TIME: 運作着的該指令所占用的CPU處理時間
- CMD: 該程序所運作的指令
這些資訊在顯示時未排序。
2. 顯示所有目前程序
使用 -a 參數。-a 代表 all。同時加上x參數會顯示沒有控制終端的程序。
- $ ps -ax
這個指令的結果或許會很長。為了便于檢視,可以結合less指令和管道來使用。
- $ ps -ax | less
ps all 資訊
3. 根據使用者過濾程序
在需要檢視特定使用者程序的情況下,我們可以使用 -u 參數。比如我們要檢視使用者'pungki'的程序,可以通過下面的指令:
- $ ps -u pungki
通過使用者過濾
4. 通過cpu和記憶體使用來過濾程序
也許你希望把結果按照 CPU 或者記憶體用量來篩選,這樣你就找到哪個程序占用了你的資源。要做到這一點,我們可以使用 aux 參數,來顯示全面的資訊:
- $ ps -aux | less
顯示全面資訊
當結果很長時,我們可以使用管道和less指令來篩選。
預設的結果集是未排好序的。可以通過 --sort指令來排序。
根據 CPU 使用來升序排序
- $ ps -aux --sort -pcpu | less
根據cpu使用排序
根據 記憶體使用 來升序排序
- $ ps -aux --sort -pmem | less
根據記憶體使用來排序
我們也可以将它們合并到一個指令,并通過管道顯示前10個結果:
$ ps -aux --sort -pcpu,+pmem | head -n 10
參考資料:
1. https://linux.cn/article-4743-1.html
2. http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html