1 回答
TA贡献1830条经验 获得超3个赞
我认为你在这里有两个合理的选择:
分离一个等待进程退出的 goroutine。等待完成后,您就知道进程已退出。(正面:很容易正确编码;负面:你专门有一个操作系统线程来等待。)
syscall.Wait4()在已发布的Pid. AWait4withsyscall.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 关注
- 206 浏览
添加回答
举报
