终止用 Python 的子进程创建的进程

以下是我的想法:

首先,我使用 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”仍然存在。 有专家能告诉我怎样解决这个问题吗? 谢谢你的关心。

Thanks to the comments from all experts, I did all you recommended, but result still remains the same.

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

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

还是要谢谢你。

我还在等待你解决这个棘手问题的宝贵经验。

174222 次浏览

用 os.kill 怎么样? 看到这里的文档了吗: http://docs.python.org/library/os.html#os.kill

在您的代码中应该是这样的

proc1.kill()

killterminate都是 terminate0的方法。在 macOS 和 Linux 上,kill向进程发送信号 terminate1,terminate发送 terminate2。在 Windows 上,它们都调用 Windows 的 terminate3函数。

只使用 Popen杀死方法

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

使用 shell=True时,process.terminate()不工作。这个 回答会帮助你。