系統維護的時候難免會遇到進程的狀態的查詢和管理,到底什麼是R,有的是S,有的還是S 呢?一直有些混沌的問題,今天細細的來總結一下:
ps是用來報告系統中程序執行狀況的命令這個是無可厚非的,linux進程的狀態:
D 不可中斷睡眠 (通常是在IO操作) 收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生
R 正在運行或可運行(在運行隊列排隊中)
S 可中斷睡眠 (休眠中, 受阻, 在等待某個條件的形成或接受到信號)
T 已停止的 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行
W 正在換頁(2.6.內核之前有效)
X 死進程 (未開啟)
Z 殭屍進程 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放BSD風格的
< 高優先順序(not nice to other users)
N 低優先順序(nice to other users)
L 頁面鎖定在內存(實時和定製的IO)
s 一個信息頭
l 多線程(使用 CLONE_THREAD,像NPTL的pthreads的那樣)
在前台進程組
例如:
[test@pan ~]$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1672 516 ? S Apr21 0:00 init [5]
root 2 0.0 0.0 0 0 ? S Apr21 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN Apr21 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S Apr21 0:00 [migration/1]
root 5 0.0 0.0 0 0 ? SN Apr21 0:00 [ksoftirqd/1]
root 6 0.0 0.0 0 0 ? S Apr21 0:00 [migration/2]
其中這個參數來列出所有的信息以提供自己檢查程序的問題!在上面的程序列出當中,說明如下:
USER:說明該程序是屬於哪一個人的;
PID:該程序的代號;
%CPU:代表該程序使用了多少 CPU 資源;
%MEM:代表該程序使用了多少的 RAM ;
VSZ, RSS:佔去的 ram 的大小( bytes );
TTY:是否為登入者執行的程序?若為 tty1-tty6 則為本機登入者,若為 pts/?? 則為遠程登入者執行的程序
STAT:該程序的狀態
START:該程序開始的日期;
TIME:該程序運行的時間?
COMMAND:該程序的內容啦!
ps命令一般和grep搭配使用,列出某個特定進程的狀態
ps -aux |grep Mega或者ps -ef |grep Mega (檢查進程名包含Mega的進程運行狀況)
man ps的解釋:
linux ps(process status) 命令詳解
功能說明:報告程序狀況.
語 法:ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C <指令名稱>][-g <群組名稱>][-G <群組識別碼>][-p <程序識別碼>][p <程序識別碼>][-s <階段作業>][-t <終端機編號>][t <終端機編號>][-u <用戶識別碼>][-U <用戶識別碼>][U <用戶名稱>][-<程序識別碼>][--cols <每列字元數>][-- columns <每列字元數>][--cumulative][-- elect][--forest][--headers][--help] [--info][--lines <顯示列數>][--no-headers][--group <群組名稱>][-Group <群組識別碼>][--pid <程序識別碼>][--rows <顯示列數>][--sid <階段作業>][--tty <終端機編號>][--user <用戶名稱>][--User <用戶識別碼>][--version][--width <每列字元數>]
補充說明:ps是用來報告程序執行狀況的指令,您可以搭配kill指令隨時中斷,刪除不必要的程序.
參 數:
-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"參數相同.