【发布时间】:2009-09-04 12:38:06
【问题描述】:
我希望能够启动一个进程,然后能够杀死它
【问题讨论】:
我希望能够启动一个进程,然后能够杀死它
【问题讨论】:
这是一个小python脚本,它启动一个进程,检查它是否正在运行,等待一段时间,杀死它,等待它终止,然后再次检查。它使用'kill'命令。 python subprocess 2.6 版本有一个 kill 功能。这是在 2.5 上写的。
import subprocess
import time
proc = subprocess.Popen(["sleep", "60"], shell=False)
print 'poll =', proc.poll(), '("None" means process not terminated yet)'
time.sleep(3)
subprocess.call(["kill", "-9", "%d" % proc.pid])
proc.wait()
print 'poll =', proc.poll()
定时输出显示它在大约 3 秒后终止,而不是调用 sleep 所暗示的 60 秒。
$ time python prockill.py
poll = None ("None" means process not terminated yet)
poll = -9
real 0m3.082s
user 0m0.055s
sys 0m0.029s
【讨论】:
os.kill(..)杀死进程
proc.terminate() 或 proc.kill() 自 python 2.6 起
看看subprocess 模块。
您还可以通过 os 模块使用像 fork() 这样的低级原语。
【讨论】:
一个使用子进程模块的简单函数:
def CMD(cmd) :
p = subprocess.Popen(cmd, shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
close_fds=False)
return (p.stdin, p.stdout, p.stderr)
【讨论】:
请参阅文档了解原始 fork() 和模块 subprocess、multiprocessing、multithreading
【讨论】:
如果你完全需要与子进程交互,我推荐 pexpect 模块(link text)。您可以向进程发送输入,接收(或“预期”)输出作为回报,并且您可以关闭进程(使用 force=True 发送 SIGKILL)。
【讨论】: