1

在我看来,在 Python 中,没有必要收获僵尸进程。

例如,在下面的代码中

    import multiprocessing
    import time

    def func(msg):
        time.sleep(2)
        print "done " + str(msg)

    if __name__ == "__main__":
        for i in range(10):
            p = multiprocessing.Process(target=func, args=('3'))
            p.start()
            print "child"+str(i)
        print "parent"
        time.sleep(100)

当所有子进程退出时,父进程仍在运行,此时,我检查了使用的进程ps -ef ,我注意到没有失效的进程。

这是否意味着在Python中,不需要reap僵尸进程?

4

2 回答 2

0

这些进程实际上并不是僵尸,因为它们应该成功终止。您可以将子进程设置为恶魔,以便在主进程终止时它们将终止。

于 2013-05-06T10:46:45.403 回答
0

在看过图书馆之后——尤其是multiprocessing/process.py——之后,我看到了

  1. 在 中Process.start(),有一个_current_process._children.add(self)将启动的进程添加到列表/集合/任何内容中,
  2. 上面几行,有一个_cleanup()轮询和丢弃终止的进程,删除僵尸。

但这并不能解释为什么您的代码不会产生僵尸,因为孩子会等待一段时间才能终止,所以父母的start()电话还没有注意到这一点。

于 2013-05-06T11:09:05.460 回答