【问题标题】:Golang: Kill an os.Process with exec.ExitErrorGolang:使用 exec.ExitError 杀死一个 os.Process
【发布时间】:2017-11-19 17:17:57
【问题描述】:

如果我有一个名为“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()

【问题讨论】:

  • 就像文档说的那样,非零退出返回*exec.ExitError。你有没有试过这个,你有什么问题?

标签: go error-handling operating-system


【解决方案1】:

Kill() 与在进程上调用kill -9 相同,它发送一个SIGKILL,不能被捕获。与所有非零退出代码一样,Wait() 随后将返回 ExitError

您还可以选择使用Process.Signal(),它允许您指定您想要的任何信号(例如,SIGINTSIGTERM)。不幸的是,它看起来不像 os.ExitError 类型允许您检索退出代码本身作为退出状态字符串以外的任何内容。但是,您仍然可以使用该错误类型的存在或不存在作为非零或零退出状态的指示。

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 2016-10-26
    • 1970-01-01
    • 2020-10-27
    • 2012-10-23
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    相关资源
    最近更新 更多