为了账号安全,请及时绑定邮箱和手机立即绑定

为什么此代码在运行命令时出错 error="exec: not started"`?

为什么此代码在运行命令时出错 error="exec: not started"`?

Go
吃鸡游戏 2023-02-14 17:37:45
这是我的代码(writeFromProcessToFileWithMax是一个内部函数,并且工作正常):    // Go routines for non-blocking reading of stdout and stderr and writing to files    g := new(errgroup.Group)    // Read stdout in goroutine.    g.Go(func() error {        err = writeFromProcessToFileWithMax(stdoutScanner, stdoutFileWriter, maxStdoutFileLengthInGB)        if err != nil {            log.Error().Err(err).Msgf("Error writing to stdout file: %s", stdoutFilename)            return err        }        return nil    })    // Read stderr in goroutine.    g.Go(func() error {        err = writeFromProcessToFileWithMax(stderrScanner, stderrFileWriter, maxStderrFileLengthInGB)        if err != nil {            log.Error().Err(err).Msgf("Error writing to stderr file: %s", stderrFilename)            return err        }        return nil    })    // Wait the command in a goroutine.    g.Go(func() error {        return cmd.Wait()    })    // Starting the command    if err = cmd.Start(); err != nil {        log.Error().Err(err).Msg("Error starting command")        return err    }    // Waiting until errorGroups groups are done    if err = g.Wait(); err != nil {        log.Error().Err(err).Msg("Error during running of the command")    }当我运行它时,我得到以下 Error = Error during running of the command error="exec: not started"。但一切正常。它会回来咬我还是我应该压制?
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

cmd在你开始之前你正在等待。在您的旧代码中的大部分时间cmd.Wait()之前都会被调用。(无法保证两个不同的 goroutine 中的事情何时发生,除非您明确使用同步点)cmd.Start()


交换goroutine的顺序cmd.Start()和内部:cmd.Wait()


// Starting the command

if err = cmd.Start(); err != nil {

    log.Error().Err(err).Msg("Error starting command")

    return err

}


// Wait the command in a goroutine.

g.Go(func() error {

    return cmd.Wait()

})

当您启动在启动命令后等待的 goroutine 时,您可以保证以cmd.Start()正确cmd.Wait()的顺序执行。


至于为什么它似乎有效:g.Wait()阻塞直到 Go 方法的所有函数调用都返回,然后从它们返回第一个非零错误(如果有的话)。 ”


所以所有的 go 例程都完成了,包括复制输出的例程,然后您会看到执行cmd.Wait().


查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信