子进程中未收到Popen send_signal信号

时间:2013-07-24 17:57:51

标签: python signals subprocess

我使用subprocess.Popen运行多个进程,当我检测到某组文件中的任何一个文件发生更改时,我想向其中一个进程发送信号。我已经在过程中定义了一个信号处理程序,但似乎没有发送任何信号。一些帮助将不胜感激。发送信号和信号处理程序的功能如下所示。

def start_up():
    p, i = None, None
    while 1:
        subprocess.call(['clear'])
        logging.info('starting overlay on host %s' % socket.gethostname())
        p = subprocess.Popen([sys.executable, 'sdp_proc.py'])
        i = subprocess.Popen([sys.executable, 'kernel.py', sys.argv[1],
                                 sys.argv[2]])
        if file_modified():
            p.terminate()
            i.send_signal(signal.SIGINT)
        time.sleep(1)

信号处理程序如下所示:

def signal_handler(signum, frame):
    with open('log.txt', 'w') as f:
        f.write(' so what mate, received signal with signal number %s' % signum)


signal.signal(signal.SIGINT, signal_handler)

1 个答案:

答案 0 :(得分:2)

我猜想在它甚至有机会加载所有Python之前,SIGINT被发送到子进程,所以在它安装SIGINT处理程序之前,意味着它会立即死掉。

您可能希望在发送任何您期望由您自己的处理程序代码处理的SIGINT信号之前,观察子进程是否满足某些成功加载条件(可能只是在管道上发送一个字节)。