【问题标题】:Killing all child process at timeout超时杀死所有子进程
【发布时间】:2019-12-09 12:05:28
【问题描述】:

我有一个脚本 a.py

此脚本调用 b.py,这是一个类似的脚本,它调用 c.py,后者调用 d.py。我试图模拟一个条件,如果 b 遇到超时我应该杀死 b 和它产生的所有子进程,当我使用 killpg api 时,我看到所有进程被杀死,包括 a.py,我也尝试使用 os.kill但它只会杀死 b.by. 有没有办法杀死 b.py 及其产生的所有进程但不杀死 a.py?

我正在使用 python 2.7.12

#!/usr/bin/python -t

import time
import subprocess
import os
import signal

cmd = "./b.py"
p = subprocess.Popen(cmd, shell=False, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
time.sleep(30)
#os.kill(p.pid, signal.SIGKILL)
os.killpg(os.getpgid(p.pid), signal.SIGTERM)

【问题讨论】:

    标签: python-2.7 subprocess


    【解决方案1】:

    This 看起来很相似。我认为一般来说,您可能需要保留子进程的列表才能优雅地杀死它们。

    【讨论】: