2013-12-02 4 views
4

В операционной системе Linux Ubuntu, я бег test.py сумы которые содержат GObject петли с помощью subprocess по:Как убить процесс, созданный подпроцессом в python?

subprocess.call(["test.py"]) 

Теперь этот test.py будет Creat процесса. Есть ли способ убить этот процесс в Python? Примечание: я не знаю идентификатор процесса.

Прошу прощения, если я не очень четко объяснил свою проблему, поскольку я новичок в этих формах и новичок в python в целом.

+0

Является ли это работает? 'p = subprocess.call ([" test.py "]); p.kill()'. –

+0

Нет, это даёт мне: 'AttributeError: int объект не имеет атрибута kill' – Mero

+0

Связанный (более сложный) случай: [Прекратить вывод вывода вывода на Python без зависания?] (Http://stackoverflow.com/q/4417962/4279) – jfs

ответ

0

subprocess.call ожидает завершения процесса и возвращает значение кода выхода (целое число), следовательно, нет способа узнать идентификатор процесса дочернего процесса. Вы должны рассмотреть возможность использования subprocess.Popen, который выполняет дочерний процесс forks().

1

subprocess.call() просто subprocess.Popen().wait():

from subprocess import Popen 
from threading import Timer 

p = Popen(["command", "arg1"]) 
print(p.pid) # you can save pid to a file to use it outside Python 

# do something else.. 

# now ask the command to exit 
p.terminate() 
terminator = Timer(5, p.kill) # give it 5 seconds to exit; then kill it 
terminator.start() 
p.wait() 
terminator.cancel() # the child process exited, cancel the hit 
Смежные вопросы