linux上進程狀態查詢

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 -auxlinux

列出相似程序樹的程序顯示(顯示進程下有哪些子進程)
ps -axjfruby

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

ps aux | egrep '(cron|syslog)'ui

也能夠這樣使用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失敗,剛進程顯然不存在,而後讀取該文件的內容,找出Statecode

相關文章
相關標籤/搜索