如果我有一个名为“myCmd”的os.Exec对象,并且调用了myCmd.Process.Kill(),则该进程的返回码行为是什么?它会返回exec.ExitError吗?我想强制杀死os.Exec进程(i.eo kill -9),让它返回exec.ExitError或我的goroutine可以为返回代码0的常规cmd导出区分的东西。

到目前为止,我有:

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(),它允许您指定所需的任何信号(例如,改为SIGINTSIGTERM)。不幸的是,它看起来不像os.ExitError类型,它允许您以退出状态字符串以外的任何形式检索退出代码本身。但是,您仍然可以使用该错误类型的存在或不存在来指示非零或零退出状态。

关于go - Golang : Kill an os.Process with exec.ExitError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44597543/

10-10 05:42