在我的带有内核2.6.18的Fedora Core 9网络服务器上,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>
这是操作系统错误吗?配置错误?我正在寻找关于这个问题的根源的灵感。 感谢
答案 0 :(得分:2)
这在Ubuntu上以两种方式打击了我:
内核出了问题。在我的情况下,一个内核驱动程序崩溃了,进程内部发生了疯狂。测试它的最好方法是检查/ var / log / syslog(和dmesg)以查看是否有任何错误 - 例如“BUG:无法在0000000000000028处理内核空指针解除引用”,
另一次我看到这是因为init不是“大多数用途的子进程的父”(实际的手册页引用)。当您使用ptrace系统调用(strace程序在内部使用)附加到进程时,可能会发生这种情况。例如,我遇到了将strace附加到子进程B的情况。最后,进程B终止,就像它的父进程一样(不确定是什么顺序)。然后,进程B看起来像init拥有的僵尸。然而,它的“最多目的”父母实际上是strace计划。在杀死strace之后,进程B被收获