diff options
Diffstat (limited to 'internal/task/command_unix.go')
| -rw-r--r-- | internal/task/command_unix.go | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/internal/task/command_unix.go b/internal/task/command_unix.go new file mode 100644 index 0000000..25e7fa3 --- /dev/null +++ b/internal/task/command_unix.go @@ -0,0 +1,26 @@ +//go:build unix + +package task + +import ( + "errors" + "os" + "os/exec" + "syscall" +) + +func configureCommandContext(cmd *exec.Cmd) { + cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + cmd.Cancel = func() error { + if cmd.Process == nil { + return os.ErrProcessDone + } + if err := syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL); err != nil { + if errors.Is(err, syscall.ESRCH) { + return os.ErrProcessDone + } + return err + } + return nil + } +} |
