diff --git a/lab/calls/call.py b/lab/calls/call.py index 7c6e5cb2e..246b0ad30 100644 --- a/lab/calls/call.py +++ b/lab/calls/call.py @@ -242,13 +242,19 @@ def _update_cpu_time(self): def _terminate_process_group(self): """Terminate the entire process group (parent and all children).""" + try: + pgid = os.getpgid(self.process.pid) + except (OSError, ProcessLookupError): + return + with contextlib.suppress(OSError, ProcessLookupError): - os.killpg(os.getpgid(self.process.pid), signal.SIGTERM) + os.killpg(pgid, signal.SIGTERM) + # Give it a moment to terminate gracefully. time.sleep(1) - if self.process.poll() is None: - with contextlib.suppress(OSError, ProcessLookupError): - os.killpg(os.getpgid(self.process.pid), signal.SIGKILL) + + with contextlib.suppress(OSError, ProcessLookupError): + os.killpg(pgid, signal.SIGKILL) def _monitor_time_limits(self): """