If I have a os.Exec object called "myCmd" and I call myCmd.Process.Kill(), what is the return code behavior of the process? Will it return a exec.ExitError? I want to forcefully kill the os.Exec process (i.eo kill -9), have it return a exec.ExitError or something that my goroutine can distinguish for a normal cmd exit with return code 0.
What I have so far:
myCmd.Start()
var cmdWatcher = func(childCmd os.Cmd) {
err := childCmd.Wait()
if exitErr, k := err.(*exec.ExitError); k {
fmt.Print("ExitError detected")
}
return
}
go cmdWatcher(myCmd)
myCmd.Process.Kill()
Kill()
is the same as calling kill -9
on the process, it sends a SIGKILL
, which cannot be caught. As with all non-zero exit codes, Wait()
will then return an ExitError
.
You also have the option of using Process.Signal()
, which alloww you to specify any signal you want (for example, SIGINT
or SIGTERM
instead). Unfortunately, it doesn't look like the os.ExitError type allows you to retrieve the exit code itself as anything except the exit status string. However, you can still use the presence or absence of that error type as indication of non-zero or zero exit status.