ZOMBIE程式

wailon發表於2013-11-09

--關於ZOMBIE程式:
 這些程式已經死亡,但沒有釋放系統資源,包括記憶體和一些系統表等,如果這樣的程式很多,會引發系統問題。用ps -el看出的程式狀態如果是Z,就是殭屍程式。
 ps -ef|grep defunc可以找出殭屍程式.
 有些ZOMBIE程式時用kill -9也不能殺死,而且消耗了很多系統資源不能釋放,如果系統在shutdown時發出資訊:some process wouldn’t die. 這就意味這有些程式不能被reboot發出的kill –9殺掉,這些很可能就是殭屍程式。

可以用ps 的 -l選項,得到更詳細的程式資訊.


F(Flag):一系列數字的和,表示程式的當前狀態。這些數字的含義為:
00:若單獨顯示,表示此程式已被終止。
01:程式是核心程式的一部分,常駐於系統主存。如:sched、 vhand 、bdflush 等。
02:Parent is tracing process.
04 :Tracing parent's signal has stopped the process; the parent is waiting ( ptrace(S)).
10:程式在優先順序低於或等於25時,進入休眠狀態,而且不能用訊號喚醒,例如在等待一個inode被建立時   
20:程式被裝入主存(primary memory)
40:程式被鎖在主存,在事務完成前不能被置換


S(state of? the process )
O:程式正在處理器執行  ms這個狀態從來木見過, 倒是R常見
S:休眠狀態(sleeping)
R:等待執行(runable)    R Running or runnable (on run queue) 程式處於執行或就緒狀態
I:空閒狀態(idle)
Z:殭屍狀態(zombie)   
T:跟蹤狀態(Traced)
B:程式正在等待更多的記憶體頁
D:不可中斷的深度睡眠,一般由IO引起,同步IO在做讀或寫操作時,cpu不能做其它事情,只能等待,這時程式處於這種狀態,如果程式採用非同步IO,這種狀態應該就很少見到了
 

C(cpu usage):cpu利用率的估算值
 

清除ZOMBIE(殭屍)程式可以使用如下方法:
 1. kill –18 PPID (PPID是其父程式)
 這個訊號是告訴父程式,該子程式已經死亡了,請收回分配給他的資源。
 2. 如果不行則看能否終止其父程式(如果其父程式不需要的話)。先看其父程式又無其他子程式,如果有,可能需要先kill其他子程式,也就是兄弟程式。方法是:
 kill –15 PID1 PID2(PID1,PID2是殭屍程式的父程式的其它子程式)。
 然後再kill父程式:kill –15 PPID  這樣殭屍程式就可能被完全殺掉了

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/429786/viewspace-776200/,如需轉載,請註明出處,否則將追究法律責任。

相關文章