天天看點

【Linux指令與工具】ps指令

  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參數會顯示沒有控制終端的程序。

  1. $ ps -ax

這個指令的結果或許會很長。為了便于檢視,可以結合less指令和管道來使用。

  1. $ ps -ax | less

ps all 資訊

3. 根據使用者過濾程序

在需要檢視特定使用者程序的情況下,我們可以使用 -u 參數。比如我們要檢視使用者'pungki'的程序,可以通過下面的指令:

  1. $ ps -u pungki

通過使用者過濾

4. 通過cpu和記憶體使用來過濾程序

也許你希望把結果按照 CPU 或者記憶體用量來篩選,這樣你就找到哪個程序占用了你的資源。要做到這一點,我們可以使用 aux 參數,來顯示全面的資訊:

  1. $ ps -aux | less

顯示全面資訊

當結果很長時,我們可以使用管道和less指令來篩選。

預設的結果集是未排好序的。可以通過 --sort指令來排序。

根據 CPU 使用來升序排序

  1. $ ps -aux --sort -pcpu | less

根據cpu使用排序

根據 記憶體使用 來升序排序

  1. $ 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