3755bb7d77
Nine vanilla Java servers from harness runs had been orphaned on the Mac mini for 2 to 5 days. Each harness runs in its own session (killpg on a timeout), so when a CI job was cancelled, its harnesses and their servers outlived parity.py. - parity.py: SIGTERM and SIGHUP exit through the finally blocks, which now stop the local executor's harnesses too, not only the remote hosts'. The worker (--worker) stops its harnesses the same way. - runner-gc.sh (every 6 h from launchd): stops Java processes whose parent is gone (launchd, init or systemd --user) and whose command line names a runner's checkout or a worktree's .local/, once ORPHAN_HOURS (default 3) old. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>