Popen
でサブプロセスを起動していますが、終了することを期待しています。しかし、プロセスが終了しないだけでなく、それにsigkillを送信すると、まだ生き残っています!私にとってPopenの子プロセスはなぜ死んでいないのですか?
from subprocess import Popen
import os
import time
import signal
command = ["python","--version"]
process = Popen(command)
pid = process.pid
time.sleep(5) #ample time to finish
print pid
print "Sending sigkill"
os.kill(pid,signal.SIGKILL)
try:
#Kill with signal 0 just checks whether process exists
os.kill(pid,0)
print "Process still alive immediately after (not so bad...)!"
except Exception as e:
print "Succeeded in terminating child quickly!"
time.sleep(20) #Give it ample time to die
#Kill with signal 0 just checks whether process exists
try:
os.kill(pid,0)
print "Process still alive! That's bad!"
except Exception as e:
print "Succeeded in terminating child!"
、この版画::以下は実証スクリプトがある
77881
Python 2.7.10
Sending sigkill
Process still alive immediately after (not so bad...)!
Process still alive! That's bad!
だけでなく、このスクリプトは、それが終了しているはずの後に子供がまだ生きているが、私はps
を使用できることを確認することができます印刷されているプロセスIDに、それがまだ存在することがわかります。奇妙なことに、psはプロセス名を(Python)
(かっこに注意してください)と表示します。
なぜ、 'process.terminate()'はありませんか? – zwer
ゾンビのプロセスです。あなたが['os.wait()'](https://docs.python.org/2/library/os.html#os.wait)を呼び出すまでそれは消えません。 – Kevin
@ケビン:うん、それだった!これを回答として投稿すると、私はそれを選択します。 – augray