关闭pid进程 linux,linux – 当Docker容器的PID1退出时,其他进程会发生什么?

考虑以下,在后台运行sleep 60,然后退出:

$cat run.sh

sleep 60&

ps

echo Goodbye!!!

$docker run --rm -v $(pwd)/run.sh:/run.sh ubuntu:16.04 bash /run.sh

PID TTY TIME CMD

1 ? 00:00:00 bash

5 ? 00:00:00 sleep

6 ? 00:00:00 ps

Goodbye!!!

这将启动一个Docker容器,其中bash为PID1.然后fork /执行一个睡眠进程,然后bash退出.当Docker容器死亡时,睡眠过程也会死亡.

我的问题是:睡眠过程被杀死的机制是什么?我尝试在一个子进程中捕获SIGTERM,似乎没有被绊倒.我的推测是,当关闭集群正在使用的cgroup时,Docker或者Linux内核会发送SIGKILL,但是我没有找到任何文档来澄清这一点.

编辑最接近我的解释是从baseimage-docker的以下引用:

If your init process is your app,then it’ll probably only shut down itself,not all the other processes in the container. The kernel will then forcefully kill those other processes,not giving them a chance to gracefully shut down,potentially resulting in file corruption,stale temporary files,etc. You really want to shut down all your processes gracefully.

因此,至少根据这一点,这意味着当容器退出时,内核将向所有剩余的进程发送一个SIGKILL.但是我仍然希望清楚它如何决定这样做(即,它是cgroups的一个特征?),理想的是一个更权威的来源将是不错的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值