34

次のように、subprocess.check_output() を使用して子プロセスを作成する python スクリプトを Linux マシンで実行しています。

subprocess.check_output(["ls", "-l"], stderr=subprocess.STDOUT)

問題は、親プロセスが停止しても、子プロセスがまだ実行されていることです。親が死んだときに子プロセスも殺す方法はありますか?

4

5 に答える 5

26

あなたの問題は使用subprocess.check_outputにあります-あなたは正しいです、そのインターフェースを使用して子PIDを取得することはできません。代わりに Popen を使用します。

proc = subprocess.Popen(["ls", "-l"], stdout=PIPE, stderr=PIPE)

# Here you can get the PID
global child_pid
child_pid = proc.pid

# Now we can wait for the child to complete
(output, error) = proc.communicate()

if error:
    print "error:", error

print "output:", output

終了時に子を確実に殺すには:

import os
import signal
def kill_child():
    if child_pid is None:
        pass
    else:
        os.kill(child_pid, signal.SIGTERM)

import atexit
atexit.register(kill_child)
于 2013-10-18T11:10:42.057 に答える
-2

手動でこれを行うことができます:

ps aux | grep <process name>

PID(2列目)を取得し、

kill -9 <PID> -9はそれを強制的に殺すことです

于 2013-10-18T10:47:21.213 に答える