1

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

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

根 30506 0.0 0.0 0 0 s000 Z+ 6:13PM 0:00.00(示例过程)

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

有谁知道为什么会这样?

谢谢!

4

3 回答 3

4

从 ps 的手册页:

Z 已失效(“僵尸”)进程,已终止但未由其父进程收割。

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

除了 waitpid() 之外,您还可以通过在执行子进程时使用双叉来避免这种情况。

于 2009-12-02T02:59:31.657 回答
0

我认为 -9 信号让进程尝试处理杀戮并花一些时间做家务。您可以尝试在没有信号的情况下终止进程。

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

于 2009-12-02T02:59:01.640 回答
0

僵尸进程实际上只是进程表中的一个条目。它们不运行,不消耗内存;该条目只是保留,因为父母没有检查他们的退出代码。您可以按照 Gonzalo 的建议进行双叉,也可以过滤掉 S 列中带有 Z 的所有 ps 行。

于 2009-12-05T19:24:41.773 回答