Fixes for windows process signalling

This commit is contained in:
Zach Musgrave
2023-05-22 09:29:56 -07:00
parent a46ebe1f9f
commit 6552385c17
3 changed files with 16 additions and 5 deletions
@@ -25,7 +25,6 @@ import (
"os/exec"
"path/filepath"
"sync"
"syscall"
"time"
_ "github.com/go-sql-driver/mysql"
@@ -99,10 +98,7 @@ func (u DoltUser) DoltCmd(args ...string) *exec.Cmd {
cmd := exec.Command(DoltPath, args...)
cmd.Dir = u.tmpdir
cmd.Env = append(os.Environ(), "DOLT_ROOT_PATH="+u.tmpdir)
// TODO: only on windows
cmd.SysProcAttr = &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
}
ApplyCmdAttributes(cmd)
return cmd
}
@@ -19,6 +19,10 @@ package sql_server_driver
import "syscall"
func ApplyCmdAttributes(cmd *exec.Cmd) {
// nothing to do on unix / darwin
}
func (s *SqlServer) GracefulStop() error {
err := s.Cmd.Process.Signal(syscall.SIGTERM)
if err != nil {
@@ -15,9 +15,20 @@
package sql_server_driver
import (
"os/exec"
"syscall"
"golang.org/x/sys/windows"
)
func ApplyCmdAttributes(cmd *exec.Cmd) {
// Creating a new process group for the process will allow GracefulStop to send the break signal to that process
// without also killing the parent process
cmd.SysProcAttr = &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
}
}
func (s *SqlServer) GracefulStop() error {
err := windows.GenerateConsoleCtrlEvent(windows.CTRL_BREAK_EVENT, uint32(s.Cmd.Process.Pid))
if err != nil {