2010-11-03 35 views
32

這裏是我的想法:殺滅與Python的subprocess.Popen()創建的過程

首先,我使用subprocess.Popen

其次,一定時間後創建的過程中,我試着以Popen.kill()來殺死它。

import subprocess 
import os, signal 
import time 

proc1 = subprocess.Popen("kvm -hda /path/xp.img", shell = True) 
time.sleep(2.0) 
print 'proc1 = ', proc1.pid 
subprocess.Popen.kill(proc1) 

但是,「proc1」在Popen.kill()之後仍然存在。 是否有專家告訴我如何解決這個問題? 我很欣賞你的考慮。

感謝所有專家的評論,我做了所有你推薦的,但結果仍然保持不變。

proc1.kill() #it sill cannot kill the proc1

os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1 

謝謝大家都是一樣的。

而我仍在等待您解決這個棘手問題的寶貴經驗。

+0

爲什麼你需要「shell = True」?沒有這個,它看起來正如你所期望的那樣工作。 – 2010-11-04 05:16:09

+4

不要在標題中放置[已解決],請選擇正確答案並單擊檢查符號。 – bluish 2010-12-20 16:41:32

+1

正確的答案在這裏:http://stackoverflow.com/questions/4789837/how-to-terminate-a-python-subprocess-launched-with-shell-true – 2013-01-11 06:12:01

回答

19

在你的代碼應該是

proc1.kill() 

殺死或終止是POPEN對象的一個​​方法,它發送信號signal.SIGKILL的過程。

+14

謝謝第一。但是,我試過這一個,它仍然不工作... – user495511 2010-11-03 13:07:41

+2

,不起作用 – 2015-12-28 17:59:07

7

僅使用POPEN殺法

 process = subprocess.Popen(task.getExecutable(), stdout=subprocess.PIPE,  stderr=subprocess.PIPE, shell=True) 
     process.kill() 
+2

這個工作,直到我在「process.kill()」前面加上「time.sleep(x)」。 – user495511 2010-11-03 13:10:01

+2

這不起作用 – 2015-12-28 18:00:16

9

process.terminate()使用shell=True時不起作用。這answer會幫助你。

+0

非常感謝你,你的回答結束了我3個小時的調試 – tahayk 2017-08-30 11:05:20