【发布时间】:2018-12-20 16:42:26
【问题描述】:
在我的(非常简化的)场景中,在 python 2.7 中,我有 2 个进程:
- 父进程,它执行一些任务。
- 子进程,X时间后需要杀死父进程。
子进程的创建:
killer = multiprocessing.Process(...)
killer.start()
子进程X时间后执行如下代码(代码简化版):
process = psutil.Process(parent_pid)
...
if time_elapsed:
while True:
process.kill()
if not process.is_alive:
exit()
问题在于它将父进程作为僵尸进程离开,而子进程永远不会退出,因为父进程还活着。
相同的代码在 Windows 中按预期工作。
我看到的所有解决方案都在谈论通过调用killer.join() 等待子进程完成的父进程,但在我的情况下,父进程是执行任务的人,它不应该等待它孩子。
处理这种情况的最佳方法是什么?
【问题讨论】:
-
有什么特别的原因为什么您必须终止进程而不是使用
threading.event之类的东西退出它?有什么理由不能仅仅改变父子进程的任务? -
在启动流程之前
killer.daemon = True有帮助吗? -
@JohnAnderson 它没有改变任何东西
-
@Felix 我并不总是使用超时功能,它只是我程序中众多选项之一。在以后的设计中,我可能会使用
threading.event之类的东西,但现在干掉它对我来说没问题。 -
如果杀死父母会让父母变成僵尸,那么问题出在祖父母身上。如果父级实际上是僵尸,则祖父级应该等待它从进程表中清除它。
标签: python linux python-2.7 multiprocessing fork