我的系统上有一些僵尸进程。 我已经杀死了那些僵尸的父母,希望init能够接pipe并释放资源(在CLOSE_WAIT中有大量的套接字)。 但是init并没有从系统中删除这些过程:
#ps ax ... 17051 ? Zl 8498:24 [impalad] <defunct> ... # ps -o ppid= -p 17051 1
有没有办法删除僵尸没有重新启动?
更新:
我试过kill -s SIGCHLD 1 。 它没有帮助。
你不能杀死一个不存在的进程。 用别人的话说:
http://www.linuxquestions.org/questions/suse-opensuse-60/howto-kill-defunct-processes-574612/
你不能杀死一个已经死亡的僵尸程序(又名僵尸)。 它不占用任何资源,所以没有什么大不了的,但是如果你真的希望它从stream程表中消失,你需要让它的父进程获得它。 “pstree”应该给你的进程层次结构,“杀-1”有时足以工作。
因为你的进程的父pid是init(1),除了重启之外你不能做任何事情。
https://unix.stackexchange.com/questions/11172/how-can-i-kill-a-defunct-process-whose-parent-is-init
你不能杀死(僵尸)进程,因为它已经死了。 系统保持僵尸进程的唯一原因是保持父进程的收集状态。 如果家长不收集退出状态,那么僵尸进程将永远停留。 消除这些僵尸进程的唯一方法是杀死父母。 如果父母是初始的,那么你只能重新启动。
我不能testing这个,但是这个家伙说你可以摆脱这样一个不存在的过程:
什么是僵尸程序,我如何杀死它?
There is already an accepted answer, however: you CAN kill the zombie process. Attach with the debugger to the parent process and call waitpid function. Eg: - let's assume that the parent has PID=100, the zombie process has PID=200 $ gdb -p 100 (gdb) call waitpid(200, 0, 0) (gdb) quit
这家伙有一个似乎继续运行的一个已经停止的进程的问题。 我不明白,但这是链接。 在这种情况下, kill -9 pid声称工作。
僵尸进程仍然活着,工作正常,但不能被杀害?