From a2abf628dc9f6091629b045a775fdc361d4bed95 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Mon, 8 Dec 2014 14:37:15 +0100 Subject: [PATCH] validate: launcher: Force kill subprocess when done with them Making sure that we do not end up having spurious subprocess around --- validate/launcher/baseclasses.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/validate/launcher/baseclasses.py b/validate/launcher/baseclasses.py index cfe6fbf731..70799429d5 100644 --- a/validate/launcher/baseclasses.py +++ b/validate/launcher/baseclasses.py @@ -216,6 +216,25 @@ class Test(Loggable): def get_subproc_env(self): return os.environ + def _kill_subprocess(self): + if self.process is None: + return + + stime = time.time() + res = self.process.poll() + while res is None: + try: + self.debug("Subprocess is still alive, sending KILL signal") + self.process.send_signal(signal.SIGKILL) + time.sleep(1) + except OSError: + pass + if time.time() - stime > DEFAULT_TIMEOUT: + raise RuntimeError("Could not kill subprocess after %s second" + " Something is really wrong, => EXITING" + % DEFAULT_TIMEOUT) + res = self.process.poll() + def run(self): self.command = "%s " % (self.application) self._starting_time = time.time() @@ -241,14 +260,10 @@ class Test(Loggable): env=proc_env) self.wait_process() except KeyboardInterrupt: - self.process.send_signal(signal.SIGINT) + self._kill_subprocess() raise - try: - self.process.send_signal(signal.SIGINT) - except OSError: - pass - + self._kill_subprocess() self.time_taken = time.time() - self._starting_time if not self.reporter.uses_standard_output():