我有一个僵尸进程:
$ 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
我在这里难过,有什么帮助?
答案 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