1

Python で簡略化された次のコードがあります。

proc_args = "gzip --force file; echo this_still_prints > out"
post_proc = subprocess.Popen(proc_args, shell=True)

while True:
    time.sleep(1)

ファイルが処理に数秒かかるほど大きいと仮定します。gzip がまだ実行されている間に Python プロセスを閉じると、gzip が終了しますが、gzip に対して次の行が引き続き実行されます。なぜこれが起こるのか知りたいのですが、次のコマンドを実行し続けないようにする方法があれば.

ありがとうございました!

4

3 に答える 3

2

プロセスが終了しても、そのすべての子プロセスが自動的に強制終了されるわけではありません。これに関する多くの議論については、この質問とそれに関連する質問を参照してください。

親が終了すると、標準入力を含むパイプが閉じられるため、gzip は終了します。EOF を読み取って終了します。ただし、2 つのコマンドを実行しているシェルは stdin から読み取っていないため、これに気づきません。そのため、コマンドを続行して実行しechoます(stdinも読み取りません)。

于 2012-10-02T00:14:37.883 に答える
0

post_proc.kill() 私はあなたが探しているものだと信じています...しかし、あなたは明示的にそれを呼び出す必要があります

参照: http://docs.python.org/library/subprocess.html#subprocess.Popen.kill

于 2012-10-01T23:38:23.003 に答える