2010-11-03 33 views
32

Đây là suy nghĩ của tôi:Giết chết một quá trình tạo ra với subprocess.Popen Python()

Trước hết, tôi tạo ra một quá trình bằng cách sử dụng subprocess.Popen

Thứ hai, sau khi số tiền nhất định của thời gian, tôi đã cố gắng để giết nó bởi 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) 

Tuy nhiên, "proc1" vẫn tồn tại sau Popen.kill(). Có thể chuyên gia nào cho tôi biết cách giải quyết vấn đề này không? Tôi đánh giá cao sự cân nhắc của bạn.

Nhờ nhận xét của tất cả các chuyên gia, tôi đã làm tất cả những gì bạn đề nghị nhưng kết quả vẫn giữ nguyên.

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

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

Cảm ơn tất cả các bạn như vậy.

Và tôi vẫn đang chờ đợi trải nghiệm quý giá của bạn về việc giải quyết vấn đề nhạy cảm này.

+0

Tại sao bạn cần "shell = True"? Nếu không có nó có vẻ như làm việc chính xác như thế nào bạn mong đợi. –

+4

Thay vì đặt [Đã giải quyết] trong tiêu đề, vui lòng chọn câu trả lời chính xác khi nhấp vào biểu tượng dấu kiểm. – bluish

+1

câu trả lời đúng là ở đây: http://stackoverflow.com/questions/4789837/how-to-terminate-a-python-subprocess-launched-with-shell-true –

Trả lời

19

Trong code của bạn nó phải được

proc1.kill() 

giết hoặc chấm dứt là một phương pháp của đối tượng Popen đó gửi tín hiệu signal.SIGKILL để quá trình này.

+14

Cảm ơn trước. Tuy nhiên, tôi đã thử cái này, nó vẫn không hoạt động ... – user495511

+2

không hoạt động –

7

Chỉ sử dụng Popen phương pháp giết

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

Tính năng này hoạt động cho đến khi tôi thêm "time.sleep (x)" vào trước "process.kill()" .. – user495511

+2

Điều này không hoạt động –

9

process.terminate() không hoạt động khi sử dụng shell=True. Điều này answer sẽ giúp bạn.

+0

cảm ơn bạn rất nhiều, câu trả lời của bạn đã kết thúc quá trình gỡ lỗi 3 giờ của tôi – tahayk

Các vấn đề liên quan