如何杀死python中的子进程创建的进程?

时间:2013-12-02 15:59:19

标签: python linux python-2.7 subprocess

在Linux Ubuntu操作系统下,我使用test.py运行GObject个包含subprocess循环的脚本:

subprocess.call(["test.py"])

现在,这个test.py将创建进程。有没有办法在Python中终止这个过程? 注意:我不知道进程ID。

如果我没有非常清楚地解释我的问题,我很抱歉,因为我是这个表格的新手并且一般都是python的新手。

3 个答案:

答案 0 :(得分:3)

我建议不要使用subprocess.call,而是构建一个Popen对象并使用其API:http://docs.python.org/2/library/subprocess.html#popen-objects

特别是: http://docs.python.org/2/library/subprocess.html#subprocess.Popen.terminate

HTH!

答案 1 :(得分:1)

subprocess.call()只是subprocess.Popen().wait()

from subprocess import Popen
from threading import Timer

p = Popen(["command", "arg1"])
print(p.pid) # you can save pid to a file to use it outside Python

# do something else..

# now ask the command to exit
p.terminate()
terminator = Timer(5, p.kill) # give it 5 seconds to exit; then kill it
terminator.start()
p.wait()
terminator.cancel() # the child process exited, cancel the hit

答案 2 :(得分:0)

subprocess.call等待进程完成并返回退出代码(整数)值,因此无法知道子进程的进程ID。你应该考虑使用subprocess.Popen forks()子进程。