Linux PS命令詳解

獵手家園發表於2016-05-02

命令: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 工具。

1、ps 的引數說明:

ps 提供了很多的選項引數,常用的有以下幾個:

l 長格式輸出;

u 按使用者名稱和啟動時間的順序來顯示程式;

j 用任務格式來顯示程式;

f 用樹形格式來顯示程式;

a 顯示所有使用者的所有程式(包括其它使用者);

x 顯示無控制終端的程式;

r 顯示執行中的程式;

ww 避免詳細引數被截斷;

我們常用的選項是組合是 aux 或 lax,還有引數 f 的應用。

 

2、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 命令的名稱和引數;

 

3、應用舉例:

[root@localhost ~]# ps -aux |more

可以用 | 管道和 more 連線起來分頁檢視。

[root@localhost ~]# ps -aux > ps001.txt

把結果輸出到ps001.txt文字中並儲存。

[root@localhost ~]# more ps001.txt

這裡是把所有程式顯示出來,並輸出到ps001.txt檔案,然後再透過more 來分頁檢視。

 

4、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 訊號不能被捕捉、封鎖或者忽略,但是,其它的訊號可以。所以這是你的終極武器。