diff --git a/cmd/dynamic.go b/cmd/dynamic.go index 183f506..7df9f1b 100644 --- a/cmd/dynamic.go +++ b/cmd/dynamic.go @@ -7,7 +7,6 @@ import ( "os/exec" "strconv" "strings" - "syscall" "time" "github.com/pipeboard-co/pipeboard-cli/internal/client" @@ -69,7 +68,7 @@ func maybeAutoRefresh(cache *ToolsCache) { } cmd := exec.Command(self, "refresh", "--if-changed") cmd.Env = append(os.Environ(), "PIPEBOARD_AUTO_REFRESH=1") - cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + setSysProcAttr(cmd) cmd.Stdout = nil cmd.Stderr = nil _ = cmd.Start() diff --git a/cmd/proc_unix.go b/cmd/proc_unix.go new file mode 100644 index 0000000..6290f0c --- /dev/null +++ b/cmd/proc_unix.go @@ -0,0 +1,14 @@ +//go:build !windows + +package cmd + +import ( + "os/exec" + "syscall" +) + +// setSysProcAttr detaches the subprocess into its own process group +// so it survives after the parent exits. +func setSysProcAttr(cmd *exec.Cmd) { + cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} +} diff --git a/cmd/proc_windows.go b/cmd/proc_windows.go new file mode 100644 index 0000000..aa26a09 --- /dev/null +++ b/cmd/proc_windows.go @@ -0,0 +1,9 @@ +//go:build windows + +package cmd + +import "os/exec" + +// setSysProcAttr is a no-op on Windows; the subprocess runs independently +// by default when stdout/stderr are nil. +func setSysProcAttr(cmd *exec.Cmd) {}