在我看来,在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中,没有必要收获僵尸进程?
答案 0 :(得分:0)
这些进程实际上不是僵尸,因为它们应该成功终止。 您可以将子进程设置为deamonic,以便在主进程终止时它们将终止。
答案 1 :(得分:0)
看了一下图书馆 - 尤其是multiprocessing/process.py
- ,我看到了
Process.start()
中,有一个_current_process._children.add(self)
可将已启动的流程添加到列表/集合/中,_cleanup()
轮询和丢弃已终止的进程,删除了僵尸。但这并不能解释为什么你的代码不会产生僵尸,因为孩子们会等待一段时间才能终止,所以父母的start()
来电还没有注意到。