首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >runc容器启动go-lang解除连接模式

runc容器启动go-lang解除连接模式
EN

Stack Overflow用户
提问于 2016-05-25 02:00:16
回答 1查看 153关注 0票数 1

我正在使用一个自动的go lang脚本测试runc容器的启动时间,我的代码如下所示,它一直在阻塞进程,即使它在shell中运行时没有阻塞。

代码语言:javascript
复制
    command := exec.Command("runc","start","-d","redis")
    command.Dir = "/containers/redis"
    start := time.Now() 
    r,err:=command.CombinedOutput()
    duration:= time.Since(start)/time.Millisecond
    fmt.Println(duration)   
    fmt.Println(err) 
    fmt.Println(string(r))
EN

回答 1

Stack Overflow用户

发布于 2019-01-03 06:54:22

当您从sh启动一个子进程时,它会等待该子进程退出(使用类似waitpid()的命令),然后立即返回。子进程(及其所有子进程)的stdout和stderr将直接写入您的终端(而不是通过sh),即使在sh返回到提示符后也是如此。这也是.Start()会做的事情。

使用.CombinedOutput()时,要等到已启动进程(以及继承它的所有子进程)的stdout和stderr关闭。即使您的直接子进程(runc start)退出,它启动的容器可能仍然具有标准输出和标准错误的副本,并且正在向它们写入数据,因此.CombinedOutput()在确定这些文件的所有副本都已关闭之前不能返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37420728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档