繁体   English   中英

等待 exec.Cmd 返回或接收来自通道 go 的消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM