fix(tmux): KillPaneProcesses must kill pane process itself, not just descendants

Claude Code has no descendants, so only killing descendants left orphans.
Now kills the pane PID itself with SIGTERM+SIGKILL after descendants.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
mayor
2026-01-21 21:34:02 -08:00
committed by beads/crew/emma
parent 748fa73931
commit 405d40ee4b

View File

@@ -293,6 +293,7 @@ func getAllDescendants(pid string) []string {
// 3. Send SIGTERM to all descendants (deepest first)
// 4. Wait 100ms for graceful shutdown
// 5. Send SIGKILL to any remaining descendants
// 6. Kill the pane process itself
//
// This ensures Claude processes and all their children are properly terminated
// before respawning the pane.
@@ -323,6 +324,12 @@ func (t *Tmux) KillPaneProcesses(pane string) error {
_ = exec.Command("kill", "-KILL", dpid).Run()
}
// Kill the pane process itself (may have called setsid() and detached,
// or may have no children like Claude Code)
_ = exec.Command("kill", "-TERM", pid).Run()
time.Sleep(100 * time.Millisecond)
_ = exec.Command("kill", "-KILL", pid).Run()
return nil
}