在我的(非常简化的(场景中,在python 2.7中,我有两个进程:
- 父进程,它执行一些任务
- 子进程,需要在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()
来等待子进程完成,但在我的情况下,父进程是执行任务的人,不应该等待其子进程。
处理这种情况的最佳方法是什么?
您可以使用os.getppid()
来检索父级的PID,并使用os.kill()
终止它。
例如os.kill(os.getppid(), signal.SIGKILL)
请参阅https://docs.python.org/2/library/os.html和https://docs.python.org/2/library/signal.html#module-信号以供参考。
A mwo:
父级:
import subprocess32 as subprocess
subprocess.run(['python', 'ch.py'])
儿童:
import os
import signal
os.kill(os.getppid(), signal.SIGTERM)