结束使用Python的subprocess.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() #它仍然无法结束proc1
os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1
再次感谢大家。
我仍在等待你们宝贵的经验来解决这个棘手的问题。
4 个回答
13
只使用 Popen
的杀死方法
process = subprocess.Popen(
task.getExecutable(),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
process.kill()
44
process.terminate()
在使用 shell=True
时不起作用。这个 回答 会对你有帮助。
55
在你的代码中应该是这样的
proc1.kill()
这里的 kill
和 terminate
都是 Popen
对象的方法。简单来说,Popen
就是用来启动和管理其他程序的工具。在 macOS 和 Linux 系统上,kill
会向进程发送一个叫做 signal.SIGKILL
的信号,这个信号会强制结束进程。而 terminate
则发送的是 signal.SIGTERM
,这个信号是请求进程自己结束,给它一个机会去清理资源。在 Windows 系统上,这两个方法都会调用 Windows 的 TerminateProcess()
函数来结束进程。