From 6a0389f437d6ac0c0b37a4d4f374633b9ab2ac37 Mon Sep 17 00:00:00 2001 From: shuki Date: Fri, 6 Mar 2026 18:16:09 +0200 Subject: [PATCH] Use SIGKILL and os.getpgid for reliable job killing SIGTERM was being ignored by child processes. Use SIGKILL via the actual process group ID, with proc.kill() as fallback. Co-Authored-By: Claude Opus 4.6 --- tui/jobs.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tui/jobs.py b/tui/jobs.py index 558a4a4..d07ad8c 100644 --- a/tui/jobs.py +++ b/tui/jobs.py @@ -82,9 +82,13 @@ class JobManager: @staticmethod def _kill_process_group(proc: asyncio.subprocess.Process) -> None: try: - os.killpg(proc.pid, signal.SIGTERM) - except (ProcessLookupError, PermissionError): - pass + pgid = os.getpgid(proc.pid) + os.killpg(pgid, signal.SIGKILL) + except (ProcessLookupError, PermissionError, OSError): + try: + proc.kill() + except (ProcessLookupError, OSError): + pass def kill_job(self, job_id: str) -> bool: job = self._jobs.get(job_id)