是不是需要在python中获得僵尸进程?

时间:2013-05-06 10:42:06

标签: python multiprocessing

在我看来,在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中,没有必要收获僵尸进程?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

看了一下图书​​馆 - 尤其是multiprocessing/process.py - ,我看到了

  1. Process.start()中,有一个_current_process._children.add(self)可将已启动的流程添加到列表/集合/中,
  2. 上面几行,有一个_cleanup()轮询和丢弃已终止的进程,删除了僵尸。
  3. 但这并不能解释为什么你的代码不会产生僵尸,因为孩子们会等待一段时间才能终止,所以父母的start()来电还没有注意到。