[英]Wait for exec.Cmd to return or receive message from channel go
我想优雅地关闭运行 os/exec cmd 的 goroutine。我将如何等待 cmd.Wait() 或来自频道的消息。 像这样:
for {
select {
case <-channel:
fmt.Println("Exit Signal")
cmd.Process.Kill()
break
case <- cmd.Wait():
break
}
}
启动一个 goroutine 来等待进程。 使用 select 等待该 goroutine 完成或来自通道的消息:
done := make(chan struct{})
go func() {
cmd.Wait()
close(done)
}()
select {
case <-done:
// cmd.Wait() completed.
case <-channel:
fmt.Println("Exit Signal")
cmd.Process.Kill()
}
您可以尝试使用 exec.CommandContext(ctx,path,args...) 重写并让通道取消到 ctx。 然后你可以只使用 cmd.Wait()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.