正确关闭Python中的子进程

时间:2015-09-09 12:07:51

标签: python subprocess signals

我有一个Python服务器,它通过subprocess.Popen()启动多个子进程。当我在服务器上运行特定方法时,我想终止所有这些进程。

我的方法是保持对列表中所有进程的引用......

self.procs.append(subprocess.Popen(shlex.split(cmd)))

...并向所有这些中断发送以关闭它们:

for i, p in enumerate(self.procs) :
    p.send_signal(signal.SIGINT)
    print 'interrupted ' + str(i)
self.procs = []

但是,这仅适用于某些子流程。例如,在此调用之后未停止的进程之一是具有SIGINT信号的trap函数的bash脚本。如果我手动启动此脚本并通过键盘中断它,它会正确执行陷阱语句并关闭。当服务器发送信号时,脚本似乎继续运行。

这里可能出现什么问题?

编辑:我也尝试过使用SIGTERM信号,这也不起作用。

0 个答案:

没有答案