У меня есть процесс многопроцессорности Python 2.7, который не будет выходить из родительского процесса. Я установил флаг демона, который должен заставить его выйти из родительской смерти. В документах указано, что:
"Когда процесс завершается, он пытается завершить все свои демонические дочерние процессы".
p = Process(target=_serverLaunchHelper, args=args)
p.daemon = True
print p.daemon # prints True
p.start()
Когда я завершаю родительский процесс с помощью команды kill, демон остается в живых и работает (который блокирует порт при следующем запуске). Детский процесс запускает SimpleHttpServer и вызывает serve_forever
, не делая ничего другого. Я предполагаю, что часть документов "попыток" означает, что процесс блокирующего сервера останавливает процесс смерти, и это позволяет процессу стать сиротой в результате. Я мог бы заставить ребенка нажимать на другой поток и проверять основной поток для изменения идентификатора родительского процесса, но это похоже на много кода, чтобы просто реплицировать функциональность демона.
Есть ли у кого-нибудь представление о том, почему флаг демона не работает, как описано? Это повторяется на 64-битной версии Windows8 и ubuntu12 32 бит vm.
Сжатая версия функции процесса ниже:
def _serverLaunchHelper(port)
httpd = SocketServer.TCPServer(("", port), Handler)
httpd.serve_forever()