初始化永远不会清理僵尸/已终止进程

7

在我的Fedora Core 9 Web服务器上,内核版本为2.6.18,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>

这是操作系统的错误吗?还是配置有误?我正在寻找问题的根源,希望能得到一些启发。谢谢。

1个回答

4
这在Ubuntu上对我造成了两种影响:
1.内核出现问题。在我的情况下,一个内核驱动程序崩溃了,进程内部也变得混乱不堪。测试此问题的最佳方法是检查/var/log/syslog (和dmesg) ,看看是否有任何异常-例如"BUG: unable to handle kernel NULL pointer dereference at 0000000000000028"。
2.另一种情况是 init 不是“大多数情况下的子进程父进程”(实际的man页引用)。当您使用ptrace系统调用(strace程序在内部使用它)依附于进程时,就会发生这种情况。例如,我曾遇到过这样一种情况:我将strace连接到子进程B上。最终,进程B和其父进程都终止了(不知道顺序如何)。然后,进程B看起来像是init所拥有的僵尸进程。但是,它的“大多数情况下”的父进程实际上是strace程序。杀死strace后,进程B被清除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接