Ответ 1
В вашем коде это должно быть
proc1.kill()
И kill
или terminate
являются методами объекта Popen
который отправляет сигнал signal.SIGKILL
процессу.
Вот моя мысль:
Прежде всего, я создал процесс, используя 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
Спасибо, все равно.
И я все еще жду вашего драгоценного опыта по решению этой деликатной проблемы.
В вашем коде это должно быть
proc1.kill()
И kill
или terminate
являются методами объекта Popen
который отправляет сигнал signal.SIGKILL
процессу.
process.terminate() не работает при использовании shell=True
. Этот ответ поможет вам.
Используйте только метод убийства Popen
process = subprocess.Popen(
task.getExecutable(),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
process.kill()
Как насчет использования os.kill? См. Документы здесь: http://docs.python.org/library/os.html#os.kill