adjust 'proctree' to use SIGINT instead of SIGKILL (#748)

This commit is contained in:
Michael Quigley 2024-09-24 14:06:37 -04:00
parent 2163f0220d
commit 9cf5787c47
No known key found for this signature in database
GPG Key ID: 9B60314A9DD20A62
2 changed files with 19 additions and 3 deletions

View File

@ -5,6 +5,7 @@ package proctree
import (
"os/exec"
"sync"
"syscall"
)
func Init(_ string) error {
@ -52,7 +53,7 @@ func WaitChild(c *Child) error {
}
func StopChild(c *Child) error {
if err := c.cmd.Process.Kill(); err != nil {
if err := syscall.Kill(c.cmd.Process.Pid, syscall.SIGINT); err != nil {
return err
}
return nil

View File

@ -3,7 +3,6 @@
package proctree
import (
"github.com/kolesnikovae/go-winjob"
"golang.org/x/sys/windows"
"os/exec"
"sync"
@ -72,7 +71,23 @@ func WaitChild(c *Child) error {
}
func StopChild(c *Child) error {
if err := c.cmd.Process.Kill(); err != nil {
if err := sendSigInt(c); err != nil {
return err
}
return nil
}
func sendSigInt(c *Child) error {
dll, err := syscall.LoadDLL("kernel32.dll")
if er != nil {
return err
}
proc, err := dll.FindProc("GenerateConsoleCtrlEvent")
if err != nil {
return err
}
r, _, err := proc.Call(syscall.CTRL_BREAK_EVENT, uintptr(c.cmd.Process.Pid))
if err != nil {
return err
}
return nil