問題:
假設redis在容器里運行,redis在執(zhí)行rdb備份的時候,也會fork出一個進程
這時候要是主進程掛掉,這個子進程會成為子進程嗎?
疑問:
在 理解 Pod 和容器設計模式中看到描述說:
把這個 PID=1 的進程給 kill 了,或者它自己運行過程中死掉了,那么剩下三個進程的資源就沒有人回收了
這樣,存在子進程的應用的容器豈不是都有bug?
解答:
來自:linux - What happens to other processes when a Docker container's PID1 exits? - Stack Overflow
意思大概是:
- 通過
CLONE_NEWPID在新的命名空間中創(chuàng)建第一個進程,該進程具有PID=1,這個進程是命名空間的“init”進程; - 在命名空間中的孤兒進程(別的進程異常退出產(chǎn)生的)將重新成為該命名空間“init”進程的子進程,而不是 init(8)的子進程;
- 與傳統(tǒng)的 init 進程不同,PID 命名空間的“init”進程可以終止,如果終止,則命名空間中的所有進程都將終止。