次のように、subprocess.check_output() を使用して子プロセスを作成する python スクリプトを Linux マシンで実行しています。
subprocess.check_output(["ls", "-l"], stderr=subprocess.STDOUT)
問題は、親プロセスが停止しても、子プロセスがまだ実行されていることです。親が死んだときに子プロセスも殺す方法はありますか?
次のように、subprocess.check_output() を使用して子プロセスを作成する python スクリプトを Linux マシンで実行しています。
subprocess.check_output(["ls", "-l"], stderr=subprocess.STDOUT)
問題は、親プロセスが停止しても、子プロセスがまだ実行されていることです。親が死んだときに子プロセスも殺す方法はありますか?
あなたの問題は使用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)
手動でこれを行うことができます:
ps aux | grep <process name>
PID(2列目)を取得し、
kill -9 <PID>
-9はそれを強制的に殺すことです