gpt4 book ai didi

linux - 当我们向 pid 1 发送停止时,docker 如何处理子进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:57 32 4
gpt4 key购买 nike

我目前正在 Dockerfile 中使用 ENTRYPOINT ["/sbs/start.sh"]。因此,当容器启动时,start.sh 以 pid 1 运行,而我的 start.sh 脚本跨越另外两个子进程到 pid1。我的问题是,当我向 pid1 发送 docker stop 命令时,docker 将如何处理子进程?子进程会被优雅地停止吗?还是会被强行杀死?

在这些我们有子进程的情况下,是否有一个简单的进程主管和初始化系统(https://github.com/Yelp/dumb-init 或主管)来解决这些问题更好?如果是这样,请推荐一个轻量级的初始化系统?或者 pid1(在我的例子中是 start.sh)可以解决这些问题吗?

ps -ef 的输出:

root         1     0  0 19:23 ?        00:00:00 /bin/bash /sbs/start.sh

root 13 1 0 19:23 ? 00:00:00 /sbs/bin/envconsul...

root 20 13 1 19:23 ? 00:00:21 /usr/lib/...

感谢任何帮助。

最佳答案

Docker 不会在这里做任何事情。它只是向 PID 1 发送信号。如果 PID 1 有 child ,则需要处理向他们发送信号。这是标准的 unix 模型。

有关更多信息,您可以阅读 Docker and the PID 1 Zombie Reaping Problem .

当PID 1退出时,容器也会退出,所以子进程不一定会优雅退出。如果您希望他们优雅地退出,您将必须有一些知道如何做到这一点的东西。

上面的链接提供了一个解决方案,一个来自 Phusion 的图像,它有一个 init-style PID 1 来处理这样的事情。还有其他解决方案;那只是一个选择。

关于linux - 当我们向 pid 1 发送停止时,docker 如何处理子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551607/

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