1 回答

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