大家好,求助如题的问题,问题详述:
1.python主进程中利用multiprocessing.Process创建多个子进程,并为子进程设置signal handler,具体做法大致如下:
def spawn_child(sighandler, func, *args):
class _Wrapper(multiprocessing.Process):
def run(self):
signal.signal(signal.SIGINT, sighandler)
signal.signal(signal.SIGTERM, sighandler)
multiprocessing.Process.run(self)
proc = _Wrapper(target=func, args=args)
proc.daemon = True
proc.start()
2.主进程也利用signal.signal()设置了signal handler。
3.主进程不做实质工作,仅利用child0.join() + child1.join()等待子进程结束。
3.运行程序,产生主进程和子进程(2个)。
4.此时我只向主进程发送SIGINT。主进程sig handler捕获SIGINT,然后忽略该SIGINT。(此时子进程sig handler并为接收到此SIGINT,因为没有对应log输出)。
奇怪之处(以我目前的认知...)在于,log显示主进程此时执行完毕child0.join()
5.我重复上一步,再次发送SIGINT,同样的日志输出。同样的”奇怪之处“:log显示主进程执行完毕child1.join()。
在两个join()完毕后,主进程退出,子进程自动接收到SIGTERM信号,于是主进程和子进程都终止。
请问为什么主进程信号处理后子进程.join()会通过?