11

親プロセスが終了したかどうかを Python の子プロセスが検出する方法はありますか?

4

4 に答える 4

5

Python プロセスが Linux で実行されていて、prctl()システム コールが公開されている場合は、こちらの回答を使用できます。

これにより、親プロセスが終了したときにシグナルが子プロセスに送信される可能性があります。

于 2009-04-17T08:02:38.927 に答える
4

これを開始したときに親が生きていると仮定すると、 psutilを使用して、ビジー ループで親がまだ生きているかどうかを確認できます。

import psutil, os, time
me = psutil.Process(os.getpid())
while 1:
    if me.parent is not None:
        # still alive
        time.sleep(0.1)
        continue
    else:
        print "my parent is gone"

あまり素敵ではありませんが...

于 2010-11-19T20:58:53.943 に答える
2

私が知っている唯一の信頼できる方法は、この目的専用のパイプを作成することです。子は、パイプからの読み取りを繰り返し試行する必要があります。できればノンブロッキング方式か、select を使用します。パイプがもう存在しない場合 (おそらく親の死のため)、エラーが発生します。

于 2009-10-05T10:32:39.707 に答える
1

プロセスの非常に早い段階で親プロセスの ID を読み取ってからチェックすることで問題を解決できるかもしれませんが、もちろん競合状態が発生しやすくなります。スポーンを行った親は、プロセスが最初の命令を実行する前に、すぐに死亡した可能性があります。

特定の PID が「予想される」親を参照しているかどうかを確認する方法がない限り、確実に行うのは難しいと思います。

于 2009-04-17T08:01:56.387 に答える