我在前台启动了我的程序(一个守护程序),然后我用kill -9
杀死了它,但是我得到了一个僵尸进程,我不能用kill -9
杀死它。如何杀死一个僵尸进程?
如果僵尸进程是一个死进程(已经被杀死),我如何从ps aux
的输出中删除它?
root@OpenWrt:~# anyprogramd &
root@OpenWrt:~# ps aux | grep anyprogram
1163 root 2552 S anyprogramd
1167 root 2552 S anyprogramd
1169 root 2552 S anyprogramd
1170 root 2552 S anyprogramd
10101 root 944 S grep anyprogram
root@OpenWrt:~# pidof anyprogramd
1170 1169 1167 1163
root@OpenWrt:~# kill -9 1170 1169 1167 1163
root@OpenWrt:~# ps aux |grep anyprogram
1163 root 0 Z [anyprogramd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
1163 root 0 Z [anyprogramd]
9条答案
按热度按时间b4lqfgs41#
将这里的几个答案组合成一个优雅的方法,在杀死进程之前确认哪个进程是僵尸进程。将脚本添加到
.bashrc
/.zshrc
并运行killZombie
命令。pjngdqdw2#
僵尸已经死了,所以你不能杀死它。要清理僵尸,它必须由它的父母伺候,所以杀死父母应该可以消除僵尸。(父进程死亡后,pid1将继承僵停进程,pid1将等待僵停进程并清除其在进程表中的条目。)如果您的守护进程正在产生成为僵停进程的子进程,你有一个bug。2你的守护进程应该注意到它的子进程何时死亡,并通过
wait
来确定它们的退出状态。下面是一个示例,说明如何向僵尸进程的父进程发送信号(请注意,这是非常粗糙的,可能会杀死您不希望的进程。我不建议使用这种大锤):
66bbxpm53#
您可以使用以下命令终止僵停进程的父进程来清理僵停进程:
n1bvdmb64#
我试探着:
这将起作用:)
ugmeyewa5#
在x1e0 f1 * 找到
2)这里有一个伟大的提示,从另一个用户(Thxs Bill Dandreta):有时候
不会终止进程。运行
第四个字段是父进程,杀死所有僵尸的父进程,僵尸就死了!
范例
是僵尸
无效。
清除僵尸。
92dk7w1h6#
我试过了
对我也很有效。
hts6caw37#
有时父ppid不能被删除,因此删除僵停pid
ui7jx7zq8#
在Mac上,以上命令/指令都不起作用。要删除僵尸进程,您可以右键单击停靠图标-〉故障排除-〉清理/清除数据。
uyto3xhc9#
我不敢尝试以上方法。
我的解决方案是htop然后检测哪个进程有多处理。产生并杀死它。