我有一個docker容器,它運行node.js應用程序。此應用程序運行一個無頭鍍鉻實例。殭屍裏面的碼頭
,一切順利,但如果我殺了鍍鉻的實例,並檢查拼命地跑進程列表,我會看到2個(實際上是3 + 2的貓過程)殭屍鉻工藝(解散)仍處於系統。我知道這個程序是一個兒童 (死亡父母鉻工藝),這是未完成正確並附init過程。
我試圖直接殺死它 - 拒絕。另外我試圖用detached:true
標誌產生鉻,並直接殺死所有子進程,當主鉻接收到「退出」信號時,無論如何ps -A | grep chrome
顯示兩個不存在給我。有任何想法嗎?
UPD: 謝謝大家的幫助。添加--init
完全解決了我的問題。使用另一個基本圖像也很好,但我決定這種方法不是必須的。也可以找到根本原因的好描述here
你是指在碼頭終端內運行「root @ daf1ccd11aaa:〜/ myapp#** wait **」(或者調用node.js exec('wait',()= {...})) ?如果是的話,它沒有幫助,如果我理解錯誤 - 請解釋你的建議 –
閱讀關於殭屍進程的鏈接文章。您需要在容器中調用[等待系統調用](http://man7.org/linux/man-pages/man2/waitpid.2.html)的PID 1。使用'dumb-init'(或'supervisord'或其他進程管理器)之類的東西可以爲你做到這一點。 – larsks