2016-04-28 10 views
1

私は何をしたいですか?通信プロトコルを開始して終了するスクリプトを作成する作成されたサブプロセスとそれによって作成されたすべてのプロセスを強制終了します

私は何を持っていますか? シェルスクリプトを開くpythonスクリプトがあり、このシェルスクリプトはプロトコルを初期化します。私は親プロセスを殺すとすべてがうまく行きます(しかし、最終プロジェクトでは、親プロセスは生き残る必要があります)が、サブプロセスを終了するとゾンビ関数になり、私のプロトコルは動作し続けます。私がすることができると信じて

問題:私はシェルスクリプトを「殺す」だ(、それは私が何をしたいのプロトコルだではない)

私はシェルスクリプトを起動する行:

`protocolProcess = subprocess.Popen(["sh", arquivo], cwd = localDoArquivo) #inicia o protocolo` 

protocolProcessPID = protocolProcess.pid #armazena o pid do protocolProcess 

ライン私はシェルスクリプトを殺す:os.kill(protocolPID, signal.SIGTERM)

まあ、それだ!誰でも私を助けることができるなら、私は非常に感謝します

+0

related:[shell = Trueで起動されたpythonサブプロセスを終了させる方法](http://stackoverflow.com/q/4789837/4279) – jfs

答えて

1

ゾンビプロセスは、親プロセスによってまだ刈られていないプロセスです。

親プロセスは、時間が終了するまで、またはプロセスの終了ステータスを読み取るまで、または自身が強制終了されるまで、それらのプロセスハンドラを保持します。

親プロセスが、子プロセスをどのように生成して刈り取るかについて、より良い処理が必要なように思えます。単に子プロセスを殺すだけでは、ゾンビプロセスを解放するだけでは不十分です。

+0

開始して終了するには、適切な方法がありますか? –

+0

@FernandoSantos:ゾンビがたくさんある場合を除き、ゾンビを心配しないでください。 [プロセスについてはとは何ですか、なぜそれが殺されないのですか?](http://askubuntu.com/q/201303/3712) – jfs

+0

子供を殺すには、terminate()関数を使用する必要があります。プロセスが終了するまで投票を使用してください。プロセスが終了し、リターンコードを読んだら、ゾンビプロセスを消費するはずです。 – sverasch

関連する問題