From 0d53f7ab0d904d941bd6f2fb7841372aae94e5ea Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Wed, 28 Oct 2015 20:57:28 +0800 Subject: [PATCH] ignore ProcessLookupError when killing subprocesses. Closes #167 --- artiq/frontend/artiq_ctlmgr.py | 10 ++++++++-- artiq/master/worker.py | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/artiq/frontend/artiq_ctlmgr.py b/artiq/frontend/artiq_ctlmgr.py index 6e2827d35..ad9071eda 100755 --- a/artiq/frontend/artiq_ctlmgr.py +++ b/artiq/frontend/artiq_ctlmgr.py @@ -134,14 +134,20 @@ class Controller: except: logger.warning("Controller %s did not respond to terminate " "command, killing", self.name) - self.process.kill() + try: + self.process.kill() + except ProcessLookupError: + pass try: await asyncio.wait_for(self.process.wait(), self.term_timeout) except: logger.warning("Controller %s failed to exit, killing", self.name) - self.process.kill() + try: + self.process.kill() + except ProcessLookupError: + pass await self.process.wait() logger.debug("Controller %s terminated", self.name) diff --git a/artiq/master/worker.py b/artiq/master/worker.py index 7d732bfe9..9ff40be7d 100644 --- a/artiq/master/worker.py +++ b/artiq/master/worker.py @@ -94,14 +94,20 @@ class Worker: except: logger.warning("failed to send terminate command to worker" " (RID %s), killing", self.rid, exc_info=True) - self.process.kill() + try: + self.process.kill() + except ProcessLookupError: + pass await self.process.wait() return try: await asyncio.wait_for(self.process.wait(), term_timeout) except asyncio.TimeoutError: logger.warning("worker did not exit (RID %s), killing", self.rid) - self.process.kill() + try: + self.process.kill() + except ProcessLookupError: + pass await self.process.wait() else: logger.debug("worker exited gracefully (RID %s)", self.rid)