杀死使用Python的subprocess.Popen()创建的进程

时间:2010-11-03 04:53:02

标签: python popen

以下是我的想法:

首先,我使用subprocess.Popen

创建了一个进程

其次,经过一段时间后,我试图通过Popen.kill()

杀死它
import subprocess
import os, signal
import time

proc1 = subprocess.Popen("kvm -hda /path/xp.img", shell = True)
time.sleep(2.0)
print 'proc1 = ', proc1.pid
subprocess.Popen.kill(proc1)

然而,在Popen.kill()之后,“proc1”仍然存在。 任何专家都可以告诉我如何解决这个问题吗? 感谢您的考虑。

感谢所有专家的评论,我做了你所做的一切,但结果仍然保持不变。

proc1.kill() #it sill cannot kill the proc1

os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1

谢谢你们。

我仍然在等待你在解决这个微妙问题上的宝贵经验。

4 个答案:

答案 0 :(得分:26)

在你的代码中它应该是

proc1.kill()

killterminate都是Popen对象的方法,它将信号signal.SIGKILL发送给流程。

答案 1 :(得分:13)

process.terminate()在使用shell=True时无效。这个answer会对您有所帮助。

答案 2 :(得分:8)

仅使用Popen kill方法

process = subprocess.Popen(
    task.getExecutable(), 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    shell=True
)
process.kill()

答案 3 :(得分:0)

使用os.kill怎么样?请参阅此处的文档:http://docs.python.org/library/os.html#os.kill