在OSX创建与multiprocessing.Process进程树。 当我将信号发送到父进程,进程进入一个连接状态:
[INFO/MainProcess] process shutting down
[INFO/MainProcess] calling join() for process Process-1
我已经赶上了信号处理的信号然后调用sys.exit(1)。 有什么我可以sys.exit(1)之前调用,将阻止等待其子这个过程?
在OSX创建与multiprocessing.Process进程树。 当我将信号发送到父进程,进程进入一个连接状态:
[INFO/MainProcess] process shutting down
[INFO/MainProcess] calling join() for process Process-1
我已经赶上了信号处理的信号然后调用sys.exit(1)。 有什么我可以sys.exit(1)之前调用,将阻止等待其子这个过程?
您可以通过设置避免这个daemon
属性为True
在你的子进程。 从multiprocessing.Process
文档(重点煤矿):
守护进程
该进程的守护进程的标志,一个布尔值。 这必须开始之前进行设置()被调用。
的初始值是从创建进程继承。
当一个进程退出时,它会试图终止其所有恶魔的子进程。
请注意,恶魔的过程中是不允许创建子进程。 否则,一个恶魔的过程中会留下,如果当它的父进程退出被终止孤立的孩子。 此外,这些都不是Unix的守护进程或服务,它们是将被终止(并且没有加入),如果非恶魔的进程已经退出的正常进程。
所以,如果p.daemon == True
,你的父进程会杀了你的孩子的过程,而不是join
它。 但是请注意,你的恶魔的过程不能创建自己的孩子(如文档规定)。
我通过使用解决了这个os._exit(1)
而不是sys.exit(1)