1. 程式人生 > >Linux中用ps命令檢視程序狀態

Linux中用ps命令檢視程序狀態

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

注: 其它狀態還包括W(無駐留頁), <(高優先順序程序), N(低優先順序程序), L(記憶體鎖頁).

可以用下面命令檢視程序狀態:

ps -aux

列出類似程式樹的程式顯示(顯示程序下有哪些子程序):

ps -axjf

找出與 cron 與 syslog 這兩個服務有關的 PID 號碼

ps aux | egrep '(cron|syslog)'

也可以這樣使用ps格式輸出來檢視程序狀態:

ps -eo user,stat
..,cmd
user          使用者名稱 
uid           使用者號 
pid           程序號 
ppid          父程序號 
size          記憶體大小, Kbytes位元組. 
vsize         總虛擬記憶體大小, bytes位元組(包含code+data+stack) 
share         總共享頁數 
nice          程序優先順序(預設為0, 最大為-20) 
priority(pri) 核心排程優先順序 
pmem          程序分享的實體記憶體數的百分比 
trs           程式執行程式碼駐留大小 
rss           程序使用的總實體記憶體數, Kbytes位元組 
time          程序執行起到現在總的CPU暫用時間 
stat          程序狀態 
cmd(args)     執行命令的簡單格式 

例子:
檢視當前系統程序的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 

在Linux下,還有一種方法檢查某個程序是否存在:利用/proc檔案系統. /proc/pid/stat裡面有程序的狀態,程序可執行檔名等.如果該檔案不存在了,那程序肯定退出了.如果存在,可以檢查狀態和檔名是否正確.效率可能比PS還是高一些,因為/proc是虛擬檔案系統,存在與記憶體中.

如何利用/proc檔案系統

cat /proc/pid/status 

這裡pid是你的程序ID,看看輸出結果,有一欄是State

你要利用/proc檔案系統時,int fd = open( “/proc/pid/status”, O_RDONLY );
這裡pid是實際的程序的pid,如果open失敗,剛程序顯然不存在,然後讀取該檔案的內容,找出State。

相關推薦

no