【发布时间】:2011-06-09 17:38:41
【问题描述】:
我有一个名为 C 的 C++ 程序,它被设计为在收到 SIGINT 信号时关闭。我编写了一个 Python 程序 P,它将 C 作为子进程运行。我想让 P 停止 C。我尝试了 3 件事,我想知道为什么其中一些不起作用。
尝试 #1:
import subprocess
import signal
import os
p = subprocess.Popen(...)
...
os.killpg(p.pid, signal.SIGINT)
这段代码给了我错误
OSError [Errno 3]: No such process`
即使p.pid 与ps 显示的pid 匹配。
尝试 #2:
import subprocess
import signal
import os
p = subprocess.Popen(...)
...
os.system('kill -SIGINT %u' % p.pid)
这给了我错误
sh: kill: bad signal`
即使kill -SIGINT <pid> 在终端上工作。
尝试 #3:
import subprocess
import signal
import os
p = subprocess.Popen(...)
...
os.system('kill -2 %u' % p.pid)
这行得通。
我的问题是,为什么 #1 和 #2 不起作用?
编辑:我最初的假设是,因为os.kill() 的文档说New in version 2.7: Windows support,我认为os.kill() 是(a)首先在 2.7 中可用并且(b)在 Windows 中工作。阅读下面的答案后,我在 Solaris 上运行了os.kill(),对不起,我首先应该这样做,它在 2.4 中确实有效。显然,文档意味着 Windows 支持是 2.7 中的新功能。哎呀。
【问题讨论】: