Golang : Kill an os. 进程与 exec.ExitError

标签 go error-handling operating-system

如果我有一个名为“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(),它允许您指定任何您想要的信号(例如,SIGINTSIGTERM 代替)。不幸的是,它看起来不像 os.ExitError 类型允许您检索退出代码本身作为退出状态字符串以外的任何内容。但是,您仍然可以使用该错误类型的存在与否作为非零或零退出状态的指示。

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

相关文章:

golang x509.MarshalPKIXPublicKey 与 x509.MarshalPKCS1PublicKey()

amazon-web-services - 为什么我的静态网页显示404?

error-handling - 如何在关闭时抛出错误?

php - 如何处理 preg-replace-callback 中的 eval 错误

go - 如何在Go模板中修剪空白

postgresql - 如何阻止 Go gorm 对我在 Postgres 中的自引用外键强制非空约束

javascript - 检测是否使用 JavaScript 中正确数量的参数调用函数的最佳方法

java - 其中哪一项需要多个处理器?多任务、多处理和多线程

operating-system - 检测 Julia 中的系统语言

c - 如何在 rmmod 上停止 Linux 内核线程?