我见过几个类似这样的问题,但是在尝试了各种检查孩子是否还活着并退出孩子进程的变体之后,我简化了这个问题,但它仍然不起作用。
使用 sys.exit(0) 退出分叉进程我错了吗?有没有其他方法可以杀死它。问题是,我不能让父进程终止进程,因为它不知道它们何时完成工作。
起初我认为这是因为在退出之前执行了系统命令(Python run system command and then exit... won't exit),但我什至在简化版本中删除了它,因为给定的解决方案也不起作用.
这是一个例子:
import sys
import os
import time
children = []
for i in range(0,3):
pid = os.fork()
if pid == -1:
continue
elif pid == 0:
# Do work...
print 'Child %d spawned' % os.getpid()
sys.exit(0)
else:
children.append(pid)
time.sleep(5)
for pid in children:
proc_path = '/proc/%d' % pid
if not os.path.exists(proc_path):
print 'Child %d is dead' % pid
else:
print 'Child %d is alive' % pid
这打印:
Child 27636 spawned
Child 27637 spawned
Child 27638 spawned
Child 27636 is alive
Child 27637 is alive
Child 27638 is alive
但是子进程应该是死的。
在这种情况下,是什么导致这些进程成为僵尸?