我使用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)
答案 0 :(得分:2)
我猜想在它甚至有机会加载所有Python之前,SIGINT被发送到子进程,所以在它安装SIGINT处理程序之前,意味着它会立即死掉。
您可能希望在发送任何您期望由您自己的处理程序代码处理的SIGINT信号之前,观察子进程是否满足某些成功加载条件(可能只是在管道上发送一个字节)。