我有一个进程是init的孩子(ppid = 1),在我的进程中发生了一些不好的事情 这个过程变成了僵尸 -
ps -ef | grep defunct
root 10384 1 0 Jun12 ? 00:48:22 [myProc] <defunct>
我尝试用kill -9杀死它,pkill和killall没有任何帮助。 我尝试将SIGCHLD发送到其父进程,这是init进程,但这也无济于事。
由于某种原因,初始化并没有收获这个过程(可能是I / O卡住了 - 我们的代码中的错误尚待发现)
似乎摆脱这种情况的唯一方法是重新启动服务器,但事实并非如此 一个可以接受的解决方案。
如何终止此过程,或阻止将来发生此过程。
我可以控制我启动流程的方式,如果这可以防止它变得不存在。
这个过程显然需要我需要使用的资源,因此只是挂在那里没有帮助。
答案 0 :(得分:1)
令人不快的答案是,你做不到。如果进程卡在系统调用中,则无法以任何方式获取(否则,init
会执行此操作),至少不是通过软件。
如果I / O与可插拔硬件有关,则拔出该硬件可能会终止系统调用,因此该过程可以继续和/或终止。