容器中存在多個進程,主進程掛了會怎么樣?

問題:

  1. 假設redis在容器里運行,redis在執(zhí)行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在新的命名空間中創(chuàng)建第一個進程,該進程具有PID=1,這個進程是命名空間的“init”進程;
  2. 在命名空間中的孤兒進程(別的進程異常退出產(chǎn)生的)將重新成為該命名空間“init”進程的子進程,而不是 init(8)的子進程;
  3. 與傳統(tǒng)的 init 進程不同,PID 命名空間的“init”進程可以終止,如果終止,則命名空間中的所有進程都將終止。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容