1 回答
TA貢獻1830條經驗 獲得超3個贊
我認為你在這里有兩個合理的選擇:
分離一個等待進程退出的 goroutine。等待完成后,您就知道進程已退出。(正面:很容易正確編碼;負面:你專門有一個操作系統線程來等待。)
syscall.Wait4()在已發布的Pid.?A?Wait4with?syscall.WNOHANGset 立即返回,填寫狀態。
如果有一個導出的函數os或cmd函數可以為您執行此操作Wait4并填充 ProcessState,那就太好了。您可以提供WNOHANG也可以不提供,只要您認為合適即可。但沒有。
要點ProcessState.Exited()是區分所有各種可能性,包括:
進程正常退出(帶有狀態字節)
進程因接收到未處理的信號而終止
請注意,還有比這兩種更多的可能性......只是似乎沒有辦法讓其他人進入ProcessState.?唯一的調用syscall.Wait似乎是:
syscall/exec_unix.go:失敗后exec,在返回錯誤之前收集僵尸;和os/exec_unix.go: 撥打電話后p.blockUntilWaitable().
如果不是blockUntilWaitable,的exec_unix.go實現變體wait()可以調用syscall.Wait4with?syscall.WNOHANG,但blockUntilWaitable它本身確保這是毫無意義的(并且這個特定的目標wait是無論如何都要等待退出)。
- 1 回答
- 0 關注
- 162 瀏覽
添加回答
舉報
