From 711515f3a1e368c28abb63c25b6a79a309844645 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sun, 23 Nov 2025 03:53:57 -0500 Subject: [PATCH] Backport 8f4590cf341a598761e3b3087bb242fc20aeb678, bc793178e16bd018a11a724961e974f5392173f5, 6d1513b469081290c0b32727c3e15233c6dff92b --- core/launchClipClearProcessCLIGeneric.go | 2 ++ core/launchClipClearProcessCLIUNIX.go | 2 ++ crypt/rcw.go | 1 + global/sysProcAttr_UNIX.go | 9 +++++++++ global/sysProcAttr_WIN.go | 9 +++++++++ 5 files changed, 23 insertions(+) create mode 100644 global/sysProcAttr_UNIX.go create mode 100644 global/sysProcAttr_WIN.go diff --git a/core/launchClipClearProcessCLIGeneric.go b/core/launchClipClearProcessCLIGeneric.go index 76d48e8..8d6da1a 100644 --- a/core/launchClipClearProcessCLIGeneric.go +++ b/core/launchClipClearProcessCLIGeneric.go @@ -7,12 +7,14 @@ import ( "os/exec" "github.com/rwinkhart/go-boilerplate/back" + "github.com/rwinkhart/libmutton/global" ) // LaunchClipClearProcess launches the timed clipboard clearing process. // 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 = global.GetSysProcAttr() _ = 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/core/launchClipClearProcessCLIUNIX.go b/core/launchClipClearProcessCLIUNIX.go index 9b81f45..032ea76 100644 --- a/core/launchClipClearProcessCLIUNIX.go +++ b/core/launchClipClearProcessCLIUNIX.go @@ -8,12 +8,14 @@ import ( "strconv" "github.com/rwinkhart/go-boilerplate/back" + "github.com/rwinkhart/libmutton/global" ) // LaunchClipClearProcess launches the timed clipboard clearing process. // 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 = global.GetSysProcAttr() _ = 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..34d3397 100644 --- a/crypt/rcw.go +++ b/crypt/rcw.go @@ -84,6 +84,7 @@ func launchRCWDProcess() []byte { if Daemonize { cmd := exec.Command(os.Args[0], "startrcwd") + cmd.SysProcAttr = global.GetSysProcAttr() _ = back.WriteToStdin(cmd, string(password)) _ = cmd.Start() } diff --git a/global/sysProcAttr_UNIX.go b/global/sysProcAttr_UNIX.go new file mode 100644 index 0000000..e4b9657 --- /dev/null +++ b/global/sysProcAttr_UNIX.go @@ -0,0 +1,9 @@ +//go:build !windows + +package global + +import "syscall" + +func GetSysProcAttr() *syscall.SysProcAttr { + return &syscall.SysProcAttr{Setsid: true} +} diff --git a/global/sysProcAttr_WIN.go b/global/sysProcAttr_WIN.go new file mode 100644 index 0000000..fcbb674 --- /dev/null +++ b/global/sysProcAttr_WIN.go @@ -0,0 +1,9 @@ +//go:build windows + +package global + +import "syscall" + +func GetSysProcAttr() *syscall.SysProcAttr { + return &syscall.SysProcAttr{CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP} +}