gpt4 book ai didi

linux - runc 容器启动 golang 分离模式

转载 作者:IT王子 更新时间:2023-10-29 02:23:10 30 4
gpt4 key购买 nike

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

    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))

最佳答案

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

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

关于linux - runc 容器启动 golang 分离模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37420728/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com