ユーザーが長時間の計算プロセス(たとえば、数時間)を開始できるようにするアプリケーションを作成しようとしています。そのために、PythonPopen()
関数を使用します。メインのPylonsプロセスが正常に機能している限り、すべてが正常ですが、Pylonsプロセスを再起動すると、前回のパスターの起動から残っているゾンビプロセスがある場合、要求に応答しません。
この問題の原因または回避策は何でしょうか?
よろしくお願いします、Ivan。
ユーザーが長時間の計算プロセス(たとえば、数時間)を開始できるようにするアプリケーションを作成しようとしています。そのために、PythonPopen()
関数を使用します。メインのPylonsプロセスが正常に機能している限り、すべてが正常ですが、Pylonsプロセスを再起動すると、前回のパスターの起動から残っているゾンビプロセスがある場合、要求に応答しません。
この問題の原因または回避策は何でしょうか?
よろしくお願いします、Ivan。
ゾンビ プロセスを回避するには、子プロセスは二重の fork を実行して、制御プロセスから自分自身を切り離す必要があります。http://en.wikipedia.org/wiki/Zombie_processを参照
したがって、必要なことは、子プロセスのフォークを再度作成することだけです。ただし、関連するファイル ハンドルを開いたままにして通信できるように注意してください。
ある種のメッセージパッシングが必要です。これは、シグナルハンドラーをインストールすることで実行できます。Python にはsignal
このためのモジュールPopen
があり、send_signal
メソッドがあります。
たぶんhttp://www.doughellmann.com/PyMOTW/subprocess/#signaling-between-processesも役立ちます。