杀死python进程时杀死子进程?


问题内容

我正在编写一个启动子进程的python程序(使用Popen)。我正在读取子流程的stdout,进行一些过滤,然后写入主流程的stdout。

当我杀死主进程(cntl-C)时,子进程将继续运行。我如何也杀死子进程?子进程可能需要长时间运行。

上下文:一次仅启动一个子进程,正在过滤其标准输出。用户可能会决定中断以尝试其他操作。

我是python的新手,并且正在使用Windows,因此请保持柔和。


问题答案:

Windows没有信号,因此您不能使用信号模块。但是,当按Ctrl-C时,您仍然可以捕获KeyboardInterrupt异常。

这样的事情应该可以帮助您:

import subprocess

try:
    child = subprocess.Popen(blah)
    child.wait()

except KeyboardInterrupt:
    child.terminate()