os.kill(pid, 0) succeeds on a zombie, and a killed orphan stays a zombie until reaped — which never happens inside a CI container with no init. The test read that as "still alive" and failed there while passing locally. It now reads the process state from /proc, with a control assertion so a broken liveness check cannot pass silently. The group kill itself was correct. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>