在OSX上,我使用multiprocessing.Process创建一个进程树。当我向父进程发送信号时,进程进入连接状态:
[INFO/MainProcess] process shutting down
[INFO/MainProcess] calling join() for process Process-1
我已经使用信号处理程序捕获信号,然后调用sys.exit(1)。在sys.exit(1)之前是否可以调用某些内容来阻止此进程等待其子进程?
答案 0 :(得分:3)
您可以通过在子进程上将daemon
属性设置为True
来避免这种情况。来自multiprocessing.Process
文档(强调我的):
守护程序
进程的守护进程标志,一个布尔值。必须在调用start()之前设置它。
初始值继承自创建过程。
当进程退出时,它会尝试终止所有守护进程的子进程。
请注意,不允许守护进程创建子进程。否则,一个守护进程会离开它的孩子 如果父进程退出时它被终止,则成为孤立的。 另外,这些不是Unix守护进程或服务,它们是正常的 如果非守护进程将终止(并且不加入)的进程 流程已经退出。
因此,如果p.daemon == True
,您的父进程只会杀死您的子进程,而不是join
它。但请注意,您的守护进程无法创建自己的子进程(如文档中所述)。
答案 1 :(得分:1)
我使用os._exit(1)
代替sys.exit(1)
来解决这个问题。