kill process tree on macos
1 file changed, 11 insertions(+), 3 deletions(-)
changed files
M command/command.go → command/command.go
@@ -67,7 +67,7 @@ var target int if cmd.SysProcAttr != nil && cmd.SysProcAttr.Pgid != 0 { target = cmd.SysProcAttr.Pgid } else { - target = cmd.Process.Pid + target = -cmd.Process.Pid } err := syscall.Kill(target, signal) if err != nil {@@ -76,7 +76,15 @@ } exited := make(chan struct{}) go func() { - cmd.Wait() + if cmd.Process != nil { + err := cmd.Wait() + if err != nil { + exErr := new(exec.ExitError) + if errors.As(err, &exErr) { + cmd.out.Fail("[error waiting for command: %s]\n", err) + } + } + } exited <- struct{}{} close(exited) }()@@ -90,7 +98,7 @@ return err } cmd.out.Fail("[command not stopped, killing]\n") - err = cmd.Process.Kill() + err = syscall.Kill(target, syscall.SIGKILL) if err != nil && !errors.Is(err, os.ErrProcessDone) { return fmt.Errorf("error killing command: %v", err) }