親プロセスの終了時に終了しない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で繰り返すことができます。
Aは、処理機能のバージョンを煮詰め以下の通りです:
def _serverLaunchHelper(port)
httpd = SocketServer.TCPServer(("", port), Handler)
httpd.serve_forever()
申し訳ありませんが、本当に親が死んだときに子供が辞めることを本当に保証したいのであれば、両親が消えていくのを見るために子供のプロセスにロジックをプログラムする必要があります。明確かつ迅速な答えをありがとう! – Pyrce