在我的场景(非常简化)中,在python 2.7中,我有2个进程:
创建子进程:
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()
等待子进程完成,但就我而言,父进程是执行任务的人,因此不应等待为它的孩子。
处理这种情况的最佳方法是什么?
答案 0 :(得分:1)
您可以使用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-signal以供参考。
mwo:
父母:
import subprocess32 as subprocess
subprocess.run(['python', 'ch.py'])
孩子:
import os
import signal
os.kill(os.getppid(), signal.SIGTERM)