From 8f4590cf341a598761e3b3087bb242fc20aeb678 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sun, 9 Nov 2025 23:50:15 -0500 Subject: [PATCH] Fix subprocesses getting killed when the main process is force killed (fixes rcwd w/TOTP and clipboard clearing issues) --- clip/launchClipClearProcessCLIGeneric.go | 2 ++ clip/launchClipClearProcessCLIUNIX.go | 2 ++ crypt/rcw.go | 2 ++ 3 files changed, 6 insertions(+) diff --git a/clip/launchClipClearProcessCLIGeneric.go b/clip/launchClipClearProcessCLIGeneric.go index 7e18d96..b39158f 100644 --- a/clip/launchClipClearProcessCLIGeneric.go +++ b/clip/launchClipClearProcessCLIGeneric.go @@ -5,6 +5,7 @@ package clip import ( "os" "os/exec" + "syscall" "github.com/rwinkhart/go-boilerplate/back" ) @@ -13,6 +14,7 @@ import ( // For non-interactive CLI implementations, an entirely separate process is created for this purpose. func LaunchClipClearProcess(copySubject string) { cmd := exec.Command(os.Args[0], "clipclear") + cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true} _ = back.WriteToStdin(cmd, copySubject) _ = cmd.Start() os.Exit(0) // use os.Exit directly since this version of this function is only meant for non-interactive CLI implementations diff --git a/clip/launchClipClearProcessCLIUNIX.go b/clip/launchClipClearProcessCLIUNIX.go index 67fec03..0157e5f 100644 --- a/clip/launchClipClearProcessCLIUNIX.go +++ b/clip/launchClipClearProcessCLIUNIX.go @@ -6,6 +6,7 @@ import ( "os" "os/exec" "strconv" + "syscall" "github.com/rwinkhart/go-boilerplate/back" ) @@ -14,6 +15,7 @@ import ( // For non-interactive CLI implementations, an entirely separate process is created for this purpose. func LaunchClipClearProcess(copySubject string, isWayland bool) { cmd := exec.Command(os.Args[0], "clipclear", strconv.FormatBool(isWayland)) + cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true} _ = back.WriteToStdin(cmd, copySubject) _ = cmd.Start() os.Exit(0) // use os.Exit directly since this version of this function is only meant for non-interactive CLI implementations diff --git a/crypt/rcw.go b/crypt/rcw.go index 1d7924c..031a7a5 100644 --- a/crypt/rcw.go +++ b/crypt/rcw.go @@ -6,6 +6,7 @@ import ( "os" "os/exec" "strings" + "syscall" "github.com/rwinkhart/go-boilerplate/back" "github.com/rwinkhart/libmutton/global" @@ -84,6 +85,7 @@ func launchRCWDProcess() []byte { if Daemonize { cmd := exec.Command(os.Args[0], "startrcwd") + cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true} _ = back.WriteToStdin(cmd, string(password)) _ = cmd.Start() }