2017-10-09 60 views
0

我正在運行Python3中的一些進程,但它們沒有被終止。這是一個MCVE問題,在Linux 3.5上運行在Linux 16.04上。我已經嘗試過使用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

好的,我找到了問題。我必須將shell設置爲True並殺死進程組。從here

p_joypad = subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid) 
os.killpg(os.getpgid(p_joypad.pid), signal.SIGTERM)