python multiprocessing daemon失效的原因

今天写个常驻服务,使用了multiprocessing库,新的process设置了daemon属性,想通过signal来主动关闭服务,主进程进行了信号绑定,代码如下:

def handler(signum, frame):
   logger.info("got signal:%d" % signum)
   global quit
   quit = True

signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)

这样设置后,发现Ctrl+C后,父子进程均收到了信号,但是子进程并没有终止,父进程也hang住了。

查看日志,发现在子进程收到signum为2(signal.SIGINT)的信号后,又收到了15(signal.SIGTERM),这说明daemon属性设置是为了父进程往子进程发送15的信号,但是如果15也被主动捕获了,导致默认处理15的退出逻辑并没有再执行,而父进程没有收到子进程的退出状态,也hang住了,将15的捕获删除后,符合预期。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容