2009-12-15 123 views
6

在我的Fedora Core 9內核2.6.18的webserver上,init並不會收割殭屍進程。如果不是因爲進程表最終達不到可以分配新進程的上限,這將是可承受的。init永遠不會收割殭屍/死掉的進程

ps -el | grep 'Z'輸出示例:

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY   TIME CMD 
5 Z  0 2648  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
1 Z 51 2656  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
1 Z  0 2670  1 0 75 0 -  0 exit ?  00:00:02 crond <defunct> 
4 Z  0 2874  1 0 82 0 -  0 exit ?  00:00:00 mysqld_safe <defunct> 
5 Z  0 28104  1 0 76 0 -  0 exit ?  00:00:00 httpd <defunct> 
5 Z  0 28716  1 0 76 0 -  0 exit ?  00:00:06 lfd <defunct> 
5 Z 74 10172  1 0 75 0 -  0 exit ?  00:00:00 sshd <defunct> 
5 Z  0 11199  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11202  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11205  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11208  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11211  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11240  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11246  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11249  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11252  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
1 Z  0 14106  1 0 80 0 -  0 exit ?  00:00:00 anacron <defunct> 
5 Z  0 14631  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 

這是一個操作系統的錯誤?配置錯誤?我正在尋找靈感來解決這個問題的根源。 感謝

回答

2

這擊中了我在Ubuntu中的2種方式:

  1. 蹊蹺的內核。在我的情況下,一個內核驅動程序崩潰,進程內部發生瘋狂。測試這個最好的方法是檢查/ var/log/syslog(和dmesg)以查看是否有任何外觀錯誤 - 例如「BUG:無法處理0000000000000028處的內核NULL指針解除引用」,

  2. 另一次我們已經看到,當init不是大多數目的的子進程的父進程時(實際的manpage引用)。當您使用ptrace系統調用(strace程序在內部使用)將其附加到進程上時,可能會發生這種情況。例如,我已經陷入了將子句附加到子進程B的情況。最終,進程B和父進程一樣終止(不知道以什麼順序)。過程B然後看起來像init擁有的殭屍。然而,其「最目的」父母實際上是strace計劃。殺死strace後,過程B被收穫