我有一些python代码,我在其中调用子进程,并且在python脚本中我想捕获SIGINT信号,并等待子进程完成。目前我在ctrl-c时杀死了这个过程。有什么办法告诉python等待进程完成? 虽然我想等待这个过程,但我希望脚本在进程完成后死掉,不确定是否有办法执行此操作。
import subprocess as sp
from celery.platforms import signals
def outer_fun():
p = None
def signal_handler(signum, frame):
if p != None:
p.wait()
signals['INT'] = signal_handler
p = sp.Popen(['sleep','30'])
result = p.wait()
print result[0]
outer_fun()
答案 0 :(得分:0)
找到了解决方案,虽然不是我预期的有效!使用preexec_fn = os.setpgrp选项,ctrl c信号不会发送到子进程。
p = sp.Popen(cmd, preexec_fn=os.setpgrp)