捕获Ctrl-C信号并等待子进程

时间:2018-01-25 18:33:20

标签: python subprocess signals

我有一些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()

1 个答案:

答案 0 :(得分:0)

找到了解决方案,虽然不是我预期的有效!使用preexec_fn = os.setpgrp选项,ctrl c信号不会发送到子进程。

p = sp.Popen(cmd, preexec_fn=os.setpgrp)