runc容器启动go-lang deattached模式

时间:2016-05-24 18:00:16

标签: linux go runc

我正在使用自动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))

1 个答案:

答案 0 :(得分:0)

从sh启动子进程时,它将等待子进程退出(使用waitpid()之类的东西),然后立即返回。即使sh返回到提示符,子进程的stdout和stderr(及其所有子进程)也将直接写到您的终端(而不是通过sh)。 .Start()也会这样做。

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