繁体   English   中英

无需在python中收获僵尸进程吗?

[英]Is there no need to reap zombie process in python?

在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中无需获得僵尸进程?

这些进程实际上不是僵尸,因为它们应该成功终止。 您可以将子进程设置为消声级,这样,如果主进程终止,它们将终止。

看了一下库-特别是multiprocessing/process.py ,我看到了

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

但这并不能解释为什么您的代码不会产生僵尸,因为孩子们会在等待终止之前等待一会儿,因此父级的start()调用尚未注意到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM