При использовании простого многопоточного Timer (), используемого для завершения подпроцесса по истечении времени ожидания, вызов proc.kill напрямую работает, как и ожидалось, но вызов proc.kill с помощью другого обратного вызова - нет. Обратный вызов выполнен, но подпроцесс не убит?
from subprocess import Popen, PIPE
from threading import Timer
def pkill(p):
pid = p.pid
print("Killing process pid=[%s]\n" % (pid))
p.kill
def run(cmd, timeout_sec):
print("Popen() for cmd=[%s]\n" % (command))
proc = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE)
pid = proc.pid
print("Starting subprocess with pid=[%s]\n" % (pid))
## works as expected when kill called directly
timer = Timer(timeout_sec, proc.kill )
## doesn't work when given to a callback
## timer = Timer(timeout_sec, pkill, [proc] )
try:
print("Starting timer() for [%d] seconds\n" % (timeout_sec))
timer.start()
stdout, stderr = proc.communicate()
finally:
timer.cancel()
run("sleep 5", 1)