1

私の Python スクリプトでは、最初に subprocess.Popen() によってサブプロセスを起動します。その後、そのサブプロセスをkill -9 Pid.

私が見つけたのは、キルが実行された後、そのプロセスのGUIウィンドウがすぐに消えたため、サブプロセスが「停止」したことです。しかし、キルの直後に「ps aux」を実行すると、同じプロセス (同じ pid を持つ) が結果に表示されます。違いは、プロセスのコマンドが次のように () のペアに含まれていることです。

root 30506 0.0 0.0 0 0 s000 Z+ 6:13PM 0:00.00 (サンプル処理)

これにより、停止したプロセスがまだ ps によって検出されるため、プロセス検出論理が壊れます。

なぜこれが起こっているのか知っている人はいますか?

ありがとう!

4

3 に答える 3

4

psのマニュアルページから:

Z 消滅した (「ゾンビ」) プロセス。終了しましたが、その親によってリープされていません。

waitpid()それは、親が亡くなった子供のために何もしなかったことを意味します。

waitpid() とは別に、子を実行するときにダブルフォークを使用することでこれを回避できます。

于 2009-12-02T02:59:31.657 に答える
0

-9シグナルにより、プロセスはkillを処理し、ハウスキーピングに時間を費やすことができると思います。シグナルなしでプロセスを強制終了することができます。

編集:ああ、実際には-15信号で、プロセスを正常に停止させます。気にしない。

于 2009-12-02T02:59:01.640 に答える