为什么Ghost Process在kill -9之后出现

时间:2009-12-02 02:49:28

标签: python process kill

在我的Python脚本中,我首先通过subprocess.Popen()启动一个子进程。然后,我想通过kill -9 Pid杀死该子进程。

我发现在执行kill之后,子进程被“停止”,因为该进程的GUI窗口立即消失。但是当我在kill之后立即执行“ps aux”时,结果中仍会显示相同的进程(具有相同的pid)。区别在于进程的命令包含在一对()中,如下所示:

  

root 30506 0.0 0.0 0 0 s000 Z + 6:13 PM   0:00.00(样品处理)

这会破坏我的进程检测逻辑,因为ps仍然可以找到死进程。

任何人都知道为什么会这样吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

来自ps的手册页:

  

Z Defunct(“zombie”)过程,   终止但未被其收获               父节点。

这意味着父母没有为死亡的孩子做waitpid()

除了waitpid()之外,你可以在执行孩子时使用double fork来避免这种情况。

答案 1 :(得分:0)

我认为-9信号让这个过程试图处理杀戮并花一些时间管家。你可以尝试在没有信号的情况下杀死进程。

编辑:哦,它实际上是-15信号,让进程优雅地死掉。没关系。

答案 2 :(得分:0)

僵尸进程实际上只是进程表中的一个条目。他们不跑,他们不消耗记忆;该条目只是停留,因为父级尚未检查其退出代码。 你可以像Gonzalo建议的那样做一个双叉,或者你可以过滤掉S列中带有Z的所有ps线。