all repos — erl @ a5433df315bb59c07aecb2f34028f4e6138f5852

Execute Reload Loop

kill process tree on macos

Alan Pearce
commit

a5433df315bb59c07aecb2f34028f4e6138f5852

parent

1ce32a03324041480df18cc528628645536e5e8c

1 file changed, 11 insertions(+), 3 deletions(-)

changed files
M command/command.gocommand/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) }