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

goroutine 会在其 Kubernetes 容器终止后终止吗?

goroutine 会在其 Kubernetes 容器终止后终止吗?

Go
烙印99 2022-11-08 10:43:21
例如,一个容器运行主线程和一个 goroutine。主线程遇到问题并终止。请注意,对于 Golang,主线程的终止不会导致 goroutine 的自动终止。由于主线程已经终止,容器是否会被杀死并重新创建?或者容器是否会因为 goroutine 仍在运行而继续运行?如果在主线程终止后容器将被杀死并重新创建,这是否会导致 goroutine 也被终止?还是 goroutine 会无限期地继续运行并且现在没有简单的方法来终止它?
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

如果主函数存在,则程序停止。什么都不会再运行了。它将释放任何使用的资源,例如文件描述符和数据库连接。


在下面的程序中,我们永远不会看到完成打印。


func main() {

    go func() {

        time.Sleep(time.Minute)

        fmt.Println("done")

    }()


    time.Sleep(time.Second * 3)

}

https://play.golang.com/p/kPKZDdMcduS


如果具有该主要功能的程序是容器的前台进程,则容器将作为其与容器的标准行为而关闭。


如果你运行下面的例子,你可以观察到容器在睡眠结束后是如何关闭的。


$ docker run --name sample busybox sleep 3 && docker ps -a

CONTAINER ID   IMAGE     COMMAND     CREATED         STATUS                              PORTS     NAMES

fd4319261a0d   busybox   "sleep 3"   4 seconds ago   Exited (0) Less than a second ago             sample

如果正在运行程序的容器被关闭,那或多或少就像您要拔掉计算机的插头一样。您的计算机上将不再运行任何东西。不可能。


我鼓励您自己创建一些测试场景并进行验证。


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

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