如果我有一个名为“myCmd”的 os.Exec 对象并调用 myCmd.Process.Kill(),该进程的返回代码行为是什么?它会返回 exec.ExitError 吗?我想强行终止 os.Exec 进程(即 eo kill -9),让它返回 exec.ExitError 或我的 goroutine 可以区分的正常 cmd 退出和返回码 0 的东西。
我目前拥有的:
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()
等同于在进程上调用kill -9
,发送一个SIGKILL
,无法被捕获。对于所有非零退出代码,Wait()
将返回一个 ExitError
。
您还可以选择使用 Process.Signal()
,它允许您指定任何您想要的信号(例如,SIGINT
或 SIGTERM
代替)。不幸的是,它看起来不像 os.ExitError 类型允许您检索退出代码本身作为退出状态字符串以外的任何内容。但是,您仍然可以使用该错误类型的存在与否作为非零或零退出状态的指示。
关于Golang : Kill an os. 进程与 exec.ExitError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44597543/