[英]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
,我看到了
Process.start()
,有一个_current_process._children.add(self)
将启动的进程添加到列表/集合/任何内容, _cleanup()
它将轮询并丢弃终止的进程,从而删除僵尸。 但这并不能解释为什么您的代码不会产生僵尸,因为孩子们会在等待终止之前等待一会儿,因此父级的start()
调用尚未注意到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.