2017-10-09 9 views
0

私はPython3からいくつかのプロセスを実行していますが、終了していません。これは、Python 3.5でLinux 16.04で動作するMCVEの問題です。私はQJoypadとSublime3でこれを試しました。Python3は実際にプロセスを殺していません

import subprocess 
import time 

p_joypad = subprocess.Popen(['qjoypad']) # also happens with sublime3 
time.sleep(2)        # wait until process starts 

p_joypad.terminate()      # try and kill it 

p_joypad.kill()       # try and kill it again 
del p_joypad 

os.kill(p_joypad.pid, signal.SIGTERM)  # ask the OS to kill it 
os.kill(p_joypad.pid, signal.SIGKILL) 

# another attempt at calling and killing the process 
p_joypad = subprocess.Popen(['qjoypad'], preexec_fn=os.setsid) 
os.killpg(os.getpgid(p_joypad.pid), signal.SIGTERM) 

input("Process is still open, baby")  # hang up to verify this 

は当初、私は唯一のterminate()電話を持っていたが、その後、私はkill()だけでなく、メモリからオブジェクトをクリアしてみました。しかし、この後も両方のプロセスが実行されています。 Qjoypadでは他のインスタンスを呼び出すことはできません(私はPython3アプリケーションを閉じて再起動する必要があります)。これは非常に問題です。

答えて

0

さて、問題が見つかりました。 shellTrueに設定し、プロセスグループを強制終了しなければなりませんでした。 〜からhere

p_joypad = subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid) 
os.killpg(os.getpgid(p_joypad.pid), signal.SIGTERM) 
関連する問題