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 <noreply@anthropic.com>
This commit is contained in:
@@ -82,8 +82,12 @@ class JobManager:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def _kill_process_group(proc: asyncio.subprocess.Process) -> None:
|
def _kill_process_group(proc: asyncio.subprocess.Process) -> None:
|
||||||
try:
|
try:
|
||||||
os.killpg(proc.pid, signal.SIGTERM)
|
pgid = os.getpgid(proc.pid)
|
||||||
except (ProcessLookupError, PermissionError):
|
os.killpg(pgid, signal.SIGKILL)
|
||||||
|
except (ProcessLookupError, PermissionError, OSError):
|
||||||
|
try:
|
||||||
|
proc.kill()
|
||||||
|
except (ProcessLookupError, OSError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def kill_job(self, job_id: str) -> bool:
|
def kill_job(self, job_id: str) -> bool:
|
||||||
|
|||||||
Reference in New Issue
Block a user