1 回答

TA貢獻1830條經驗 獲得超3個贊
我認為你在這里有兩個合理的選擇:
分離一個等待進程退出的 goroutine。等待完成后,您就知道進程已退出。(正面:很容易正確編碼;負面:你專門有一個操作系統線程來等待。)
syscall.Wait4()
在已發布的Pid
.?A?Wait4
with?syscall.WNOHANG
set 立即返回,填寫狀態。
如果有一個導出的函數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.Wait4
with?syscall.WNOHANG
,但blockUntilWaitable
它本身確保這是毫無意義的(并且這個特定的目標wait
是無論如何都要等待退出)。
- 1 回答
- 0 關注
- 148 瀏覽
添加回答
舉報