在我的(非常简化的)场景中,在 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()
等待子进程完成,但在我的例子中,父进程是执行任务的人,它不应该等待它的 child 。
处理这种情况的最佳方法是什么?
最佳答案
您可以使用 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'])
child :
import os
import signal
os.kill(os.getppid(), signal.SIGTERM)
关于python - 在 Linux 上使用 Python 从子进程中杀死父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51305831/