diff --git a/proxy/process.go b/proxy/process.go index 91bfbd44..2c05f943 100644 --- a/proxy/process.go +++ b/proxy/process.go @@ -256,6 +256,7 @@ func (p *Process) start() error { p.cmd.Env = append(p.cmd.Environ(), p.config.Env...) p.cmd.Cancel = p.cmdStopUpstreamProcess p.cmd.WaitDelay = p.gracefulStopTimeout + setProcAttributes(p.cmd) p.cmdMutex.Lock() p.cancelUpstream = ctxCancelUpstream @@ -625,6 +626,7 @@ func (p *Process) cmdStopUpstreamProcess() error { stopCmd := exec.Command(stopArgs[0], stopArgs[1:]...) stopCmd.Stdout = p.processLogger stopCmd.Stderr = p.processLogger + setProcAttributes(stopCmd) stopCmd.Env = p.cmd.Env if err := stopCmd.Run(); err != nil { diff --git a/proxy/process_unix.go b/proxy/process_unix.go new file mode 100644 index 00000000..3e8d5d75 --- /dev/null +++ b/proxy/process_unix.go @@ -0,0 +1,12 @@ +//go:build !windows + +package proxy + +import ( + "os/exec" +) + +// setProcAttributes sets platform-specific process attributes +func setProcAttributes(cmd *exec.Cmd) { + // No-op on Unix systems +} diff --git a/proxy/process_windows.go b/proxy/process_windows.go new file mode 100644 index 00000000..28a988bb --- /dev/null +++ b/proxy/process_windows.go @@ -0,0 +1,16 @@ +//go:build windows + +package proxy + +import ( + "os/exec" + "syscall" +) + +// setProcAttributes sets platform-specific process attributes +func setProcAttributes(cmd *exec.Cmd) { + cmd.SysProcAttr = &syscall.SysProcAttr{ + HideWindow: true, + CreationFlags: 0x08000000, // CREATE_NO_WINDOW + } +}