2017-06-16 17 views
-2

如果我有一個名爲「myCmd」的os.Exec對象,並且我調用myCmd.Process.Kill(),那麼該進程的返回代碼行爲是什麼?它會返回一個exec.ExitError?我想強制殺死os.Exec進程(即kill -9),讓它返回一個exec.ExitError或我的goroutine可以區分的正常cmd出口返回代碼爲0的東西。Golang:用exec.ExitError殺死os.Process

我有什麼到目前爲止:

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() 
+0

就像文檔說的那樣,非零出口返回一個'* exec.ExitError'。你有沒有試過這個,你有什麼問題? – JimB

回答

0

Kill()相同的過程調用kill -9,它發送一個SIGKILL,這是不能被捕獲。與所有非零退出代碼一樣,Wait()將返回ExitError

你也可以選擇使用Process.Signal(),它允許你指定你想要的任何信號(例如,代替SIGINTSIGTERM)。不幸的是,它看起來不像os.ExitError類型,它允許你將退出代碼本身作爲除退出狀態字符串之外的任何東西來檢索。但是,仍然可以使用該錯誤類型的存在或不存在來指示非零或零退出狀態。