在Linux上使用Python从子进程中杀死父进程



在我的(非常简化的(场景中,在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()来等待子进程完成,但在我的情况下,父进程是执行任务的人,不应该等待其子进程。

处理这种情况的最佳方法是什么?

您可以使用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)

相关内容

  • 没有找到相关文章

最新更新