我用下面的命令启动一个子进程:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
然而,当我试图杀死使用:
p.terminate()
or
p.kill()
该命令一直在后台运行,因此我想知道如何实际终止该进程。
注意,当我使用以下命令运行时:
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
它在发出p.terminate()时成功终止。
这些答案都没有为我工作,所以我离开了工作的代码。在我的例子中,即使在用.kill()杀死进程并获得.poll()返回代码之后,进程也没有终止。
遵循子流程。Popen文档:
"...为了正确地清理,一个行为良好的应用程序应该杀死子进程并完成通信……”
proc = subprocess.Popen(...)
try:
outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
在我的情况下,我在调用proc.kill()后错过了proc. communication()。这将清除进程stdin, stdout…并且终止了这个过程。