我有一个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信号,这也不起作用。