mac*_*ler 8 python linux fork multiprocessing python-2.7
在我的(非常简化的)场景中,在 python 2.7 中,我有 2 个进程:
创建子进程:
killer = multiprocessing.Process(...)
killer.start()
Run Code Online (Sandbox Code Playgroud)
子进程在X时间后执行如下代码(代码的简化版):
process = psutil.Process(parent_pid)
...
if time_elapsed:
while True:
process.kill()
if not process.is_alive:
exit()
Run Code Online (Sandbox Code Playgroud)
问题是它让父进程成为僵尸进程,子进程永远不会退出,因为父进程还活着。
相同的代码在 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-signal以供参考。
一个莫:
家长:
import subprocess32 as subprocess
subprocess.run(['python', 'ch.py'])
Run Code Online (Sandbox Code Playgroud)
孩子:
import os
import signal
os.kill(os.getppid(), signal.SIGTERM)
Run Code Online (Sandbox Code Playgroud)