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

时间:2009-10-21 21:08:22

标签: python windows process

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

这样的事情应该让你前进:

import subprocess

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

except KeyboardInterrupt:
    child.terminate()

答案 1 :(得分:0)

subprocess.Popen对象带有kill和terminate方法(与发送给进程的信号不同)。

signal.signal允许你安装信号处理程序,你可以在其中调用孩子的kill方法。

答案 2 :(得分:0)

您可以使用python atexit模块。

例如:

import atexit

def killSubprocess():
    mySubprocess.kill()

atexit.register(killSubprocess)