diff --git a/apps/backend/internal/agent/agentctl/launcher/launcher.go b/apps/backend/internal/agent/agentctl/launcher/launcher.go index 31d760b50c..4ab241ec76 100644 --- a/apps/backend/internal/agent/agentctl/launcher/launcher.go +++ b/apps/backend/internal/agent/agentctl/launcher/launcher.go @@ -133,13 +133,9 @@ func (l *Launcher) Start(ctx context.Context) error { ) // Set process attributes: - // - Pdeathsig: kernel sends SIGTERM to child when parent dies (crash protection) - // - Setpgid: create new process group so Ctrl+C doesn't propagate directly - // (we handle shutdown ourselves via Stop()) - l.cmd.SysProcAttr = &syscall.SysProcAttr{ - Pdeathsig: syscall.SIGTERM, - Setpgid: true, // Don't inherit parent's process group - } + // - Pdeathsig on Linux: kernel sends SIGTERM to child when parent dies. + // - Setpgid: create new process group so Ctrl+C doesn't propagate directly. + l.cmd.SysProcAttr = buildSysProcAttr() // Capture stdout and stderr stdout, err := l.cmd.StdoutPipe() @@ -332,4 +328,3 @@ func (l *Launcher) monitorExit() { close(l.exited) } - diff --git a/apps/backend/internal/agent/agentctl/launcher/sysprocattr_default.go b/apps/backend/internal/agent/agentctl/launcher/sysprocattr_default.go new file mode 100644 index 0000000000..abc48b1556 --- /dev/null +++ b/apps/backend/internal/agent/agentctl/launcher/sysprocattr_default.go @@ -0,0 +1,11 @@ +//go:build !linux + +package launcher + +import "syscall" + +func buildSysProcAttr() *syscall.SysProcAttr { + return &syscall.SysProcAttr{ + Setpgid: true, + } +} diff --git a/apps/backend/internal/agent/agentctl/launcher/sysprocattr_linux.go b/apps/backend/internal/agent/agentctl/launcher/sysprocattr_linux.go new file mode 100644 index 0000000000..b7c967fc5b --- /dev/null +++ b/apps/backend/internal/agent/agentctl/launcher/sysprocattr_linux.go @@ -0,0 +1,12 @@ +//go:build linux + +package launcher + +import "syscall" + +func buildSysProcAttr() *syscall.SysProcAttr { + return &syscall.SysProcAttr{ + Pdeathsig: syscall.SIGTERM, + Setpgid: true, + } +}