diff --git a/proxy/process.go b/proxy/process.go index 72d64ec..a720906 100644 --- a/proxy/process.go +++ b/proxy/process.go @@ -304,7 +304,9 @@ func (p *Process) stopCommand(sigtermTTL time.Duration) { return } - p.cmd.Process.Signal(syscall.SIGTERM) + if err := p.terminateProcess(); err != nil { + fmt.Fprintf(p.logMonitor, "!!! failed to gracefully terminate process [%s]: %v\n", p.ID, err) + } select { case <-sigtermTimeout.Done(): diff --git a/proxy/process_stop.go b/proxy/process_stop.go new file mode 100644 index 0000000..47ed697 --- /dev/null +++ b/proxy/process_stop.go @@ -0,0 +1,9 @@ +//go:build !windows + +package proxy + +import "syscall" + +func (p *Process) terminateProcess() error { + return p.cmd.Process.Signal(syscall.SIGTERM) +} diff --git a/proxy/process_stop_windows.go b/proxy/process_stop_windows.go new file mode 100644 index 0000000..245f5bf --- /dev/null +++ b/proxy/process_stop_windows.go @@ -0,0 +1,14 @@ +//go:build windows + +package proxy + +import ( + "fmt" + "os/exec" +) + +func (p *Process) terminateProcess() error { + pid := fmt.Sprintf("%d", p.cmd.Process.Pid) + cmd := exec.Command("taskkill", "/f", "/t", "/pid", pid) + return cmd.Run() +}