termtap/internal/process/signal_unix.go
2026-04-14 21:58:56 -07:00

47 lines
774 B
Go

//go:build unix
package process
import (
"errors"
"os"
"os/exec"
"syscall"
)
func configureProcessForSignals(cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
}
func SignalProcess(cmd *exec.Cmd, sig os.Signal) error {
if cmd == nil || cmd.Process == nil {
return nil
}
pid := cmd.Process.Pid
if pid <= 0 {
return nil
}
sysSig, ok := sig.(syscall.Signal)
if !ok {
return cmd.Process.Signal(sig)
}
err := syscall.Kill(-pid, sysSig)
if err == nil || errors.Is(err, syscall.ESRCH) {
return nil
}
return cmd.Process.Signal(sig)
}
func ProcessAlive(cmd *exec.Cmd) bool {
if cmd == nil || cmd.Process == nil {
return false
}
err := syscall.Kill(-cmd.Process.Pid, 0)
return err == nil || errors.Is(err, syscall.EPERM)
}