容器中存在多个进程,主进程挂了会怎么样?

问题:

  1. 假设redis在容器里运行,redis在执行rdb备份的时候,也会fork出一个进程

  2. 这时候要是主进程挂掉,这个子进程会成为子进程吗?

疑问:

理解 Pod 和容器设计模式中看到描述说:

把这个 PID=1 的进程给 kill 了,或者它自己运行过程中死掉了,那么剩下三个进程的资源就没有人回收了

这样,存在子进程的应用的容器岂不是都有bug?

解答:

来自:linux - What happens to other processes when a Docker container's PID1 exits? - Stack Overflow

意思大概是:

  1. 通过CLONE_NEWPID在新的命名空间中创建第一个进程,该进程具有PID=1,这个进程是命名空间的“init”进程;
  2. 在命名空间中的孤儿进程(别的进程异常退出产生的)将重新成为该命名空间“init”进程的子进程,而不是 init(8)的子进程;
  3. 与传统的 init 进程不同,PID 命名空间的“init”进程可以终止,如果终止,则命名空间中的所有进程都将终止。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容