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

6 python windows process

我正在编写一个激活子进程的python程序(使用Popen).我正在读取子进程的stdout,进行一些过滤,并写入主进程的stdout.

当我杀死主进程(cntl-C)时,子进程继续运行.我如何杀死子进程?子进程很可能运行很长时间.

上下文:我一次只启动一个子进程,我正在过滤它的stdout.用户可能决定中断以尝试其他操作.

我是python的新手,我正在使用Windows,所以请保持温和.

小智 5

Windows没有信号,因此您无法使用信号模块.但是,按下Ctrl-C时仍然可以捕获KeyboardInterrupt异常.

这样的事情会让你前进:

import subprocess

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

except KeyboardInterrupt:
    child.terminate()
Run Code Online (Sandbox Code Playgroud)

  • 来自Popen.wait()上的python文档的警告:警告如果子进程生成足够的输出到stdout或stderr管道,这将阻塞等待OS管道缓冲区接受更多数据.使用communic()来避免这种情况. (2认同)