在Linux上使用Python从子进程终止父进程

10
在我的(非常简化的)场景中,在Python 2.7中,我有两个进程:
  1. 父进程,执行一些任务。
  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”退出吗?是否有充分的理由不能仅仅更改父进程和子进程的任务? - Felix
在启动进程之前,将 killer.daemon = True 设置为真有帮助吗? - John Anderson
@JohnAnderson,它没有改变任何东西。 - macro_controller
@Felix 我并不总是使用超时功能,它只是我程序中的众多选项之一。在以后的设计中,我可能会使用类似于threading.event的东西,但现在直接杀死它对我来说已经足够了。 - macro_controller
1
如果杀死父进程会将其变成僵尸进程,那么问题就出在祖先进程上。如果父进程确实是僵尸进程,那么祖先进程应该等待它清除出进程表。 - William Pursell
1个回答

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接