我有一个 Python 2.7 多处理进程,它不会在父进程退出时退出。我已经设置了守护进程标志,它应该强制它在父母死亡时退出。文档指出:
“当一个进程退出时,它会尝试终止其所有守护进程。”
p = Process(target=_serverLaunchHelper, args=args)
p.daemon = True
print p.daemon # prints True
p.start()
当我通过 kill 命令终止父进程时,守护进程保持活动状态并正在运行(这会在下次运行时阻塞端口)。子进程正在启动一个 SimpleHttpServer 并调用serve_forever
而不做任何其他事情。我的猜测是文档的“尝试”部分意味着阻塞服务器进程正在停止进程死亡,并且它让进程成为孤立的结果。我可以让孩子将服务推送到另一个线程,并让主线程检查父进程 ID 的更改,但这似乎需要大量代码来复制守护程序功能。
有人了解为什么守护程序标志没有按描述工作吗?这在 windows8 64 位和 ubuntu12 32 位 vm 上是可重复的。
流程函数的简化版本如下:
def _serverLaunchHelper(port)
httpd = SocketServer.TCPServer(("", port), Handler)
httpd.serve_forever()