无法清除父级为init的僵尸进程

时间:2013-12-12 05:02:52

标签: linux kill zombie-process

我有一个僵尸进程:

$ ps aux | grep Zl
root      6641  122  0.0  0 0 ? Zl   08:57 371:10 [ovs_dpdk] <defunct>

而且,它的父母看起来像init

$ pstree
init─┬─acpid
     ├─atd
     ├─cron
     ├─dbus-daemon
     ├─dnsmasq
     ├─6*[getty]
     ├─irqbalance
     ├─libvirtd───10*[{libvirtd}]
     ├─ovs_dpdk───{ovs_dpdk}               <==== here
     ├─rpc.idmapd

但是,杀死-9并没有杀死他......

sudo kill -9 6641

我在这里难过,有什么帮助?

4 个答案:

答案 0 :(得分:4)

你不能杀死一个僵尸,因为它已经死了。 : - )

说真的,一个僵尸进程已经退出,所以没有什么可以杀死的。它在进程表中的条目一直存在,直到创建(现在已死)子进程的父进程看到退出状态。

Wikipedia (who else?) has a great discussion of this

您可以通过告诉其父母收获死去的孩子来删除SIGCHLD的流程条目:

kill -s SIGCHLD PPID

其中PPID是父进程ID。 ht the xmodulo folks

答案 1 :(得分:1)

僵尸是一个已经退出并且不再运行的进程,但是保留在进程表中直到它的父进程“wait()s”为止它才能获得它的退出状态。杀死父母,或让它等待它的孩子。

答案 2 :(得分:0)

无法通过Kill命令清除僵尸。如果它是 Init进程(pid = 1)的子进程,则它应自动清除。

或 由于初始化过程无法清除,只需 Reboot System

如果再次生成了僵尸,则可能是代码错误。您需要研究代码问题:由于父级不等待孩子获取返回退出代码。

在这里引用各种示例作为参考,Generation and cleanup of Zombies n C 可能会有帮助。

答案 3 :(得分:-1)

如何杀死僵尸进程?

你无法杀死僵尸,因为它们已经死了。但如果你有太多的僵尸,那么杀死父进程或重新启动服务。

您可以使用从上述任何一个命令获得的PID来杀死僵尸进程。例如,具有PID 4104的杀死僵尸进程:  杀死-9 4104

参考 - http://www.cyberciti.biz/tips/killing-zombie-process.html