Linux中產生zombie的原因詳解及解決方法!
zombie英文全稱是zombie process,中文名為殭屍程式,也就是死掉的程式,那麼Linux中產生zombie的原因是什麼?具體內容請看下文。
殭屍程式,英文名zombie process,顧名思義就是死掉的程式。
殭屍程式產生的原因就是父程式產生子程式後,子程式先於父程式退出,但是父程式由於種種原因,並沒有處理子程式傳送的退出訊號,那麼這個子程式就會成為殭屍程式。
這個是所謂的zombie是指在fork()/execve()過程中,假設子程式結束時父程式仍存在,而父程式fork()之前既沒安裝SIGCHLD訊號處理函式呼叫waitpid()等待子程式結束,又沒有顯式忽略該訊號,則子程式成為殭屍程式,無法正常結束,此時即使是root身份kill-9也不能殺死殭屍程式。補救辦法是殺死殭屍程式的父程式,殭屍程式成為孤兒程式,過繼給1號程式init,init始終會負責清理殭屍程式。
殭屍程式是指的父程式已經退出,而該程式dead之後沒有程式接受,就成為殭屍程式
解決方法:
1、父程式透過wait和waitpid等函式等待子程式結束,這會導致父程式掛起。執行wait()或waitpid()系統呼叫,則子程式在終止後會立即把它在程式表中的資料返回給父程式,此時系統會立即刪除該進入點。在這種情形下就不會產生defunct程式。
2、如果父程式很忙,那麼可以用signal函式為SIGCHLD安裝handler。在子程式結束後,父程式會收到該訊號,可以在handler中呼叫wait回收。
3、如果父程式不關心重點內容子程式什麼時候結束,那麼可以用signal(SIGCLD, SIG_IGN)或signal(SIGCHLD, SIG_IGN)通知核心,自己對子程式的結束不感興趣,那麼子程式結束後,核心會回收,並不再給父程式傳送訊號。
4、fork兩次,父程式fork一個子程式,然後繼續工作,子程式fork一個孫程式後退出,那麼孫程式被init接管,孫程式結束後,init會回收。不過子程式的回收還要自己做。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2936006/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- impdp操作產生大量UNDO的原因及解決方法
- 深入探討ORA-04031的產生原因及解決方法
- Windows、Linux下檔案操作(寫、刪除)錯誤的產生原因、及解決方法WindowsLinux
- vi/vim配置篇:亂碼產生的原因及解決
- ANR原因及解決方法
- cursor: pin S產生原理及解決方法
- ORA-00214 錯誤產生原因與解決方法
- 撥號VPS中691的可能原因及解決方法?
- ORA-02020產生的原因及解決辦法
- 生產系統中EXP-00000的問題及解決
- DVR常見故障原因及解決方法VR
- RNN神經網路產生梯度消失和梯度爆炸的原因及解決方案RNN神經網路梯度
- 深度學習中“過擬合”的產生原因和解決方法深度學習
- Redis擊穿、穿透、雪崩產生原因以及解決思路Redis穿透
- 生產內網ssh登陸變慢問題原因及解決辦法內網
- No input file specified 出現的原因及解決方法
- JAVA 記憶體洩露詳解(原因、例子及解決)Java記憶體洩露
- Windows變慢原因分析及解決方法(轉)Windows
- (資料庫十)資料庫中的鎖機制以及死鎖產生的原因及解決辦法資料庫
- 網站內頁不收錄的原因及解決方法網站
- DNS故障的幾種常見原因及解決方法DNS
- Linux環境下段錯誤的產生原因及除錯方法小結Linux除錯
- ORA-00060死鎖的產生及解決
- Linux中程式崩潰及重啟的原因詳解!Linux
- 【精益生產】詳解精益物流改善方法
- 技術分享 | DNS解析不生效的原因及解決方法DNS
- u盤複製速度慢的原因及解決方法
- 資料庫連線失敗的原因及解決方法資料庫
- 資料庫連線錯誤的原因及解決方法資料庫
- dsp builder 11.0 使用過程中產生的問題及解決方案UI
- (原)詳解生產線物流規劃的原理及操作方式
- node版本升級npm命令警告原因及解決方法NPM
- CPU佔用100%原因及解決方法 轉載
- 百度快照被劫持的原因及解決方法、百度快照劫持的解決方法全
- Python產生20個隨機整數的方法詳解!Python隨機
- 造成黏包的原因,及解決方案
- 伺服器自動重啟的原因及解決方法-VeCloud伺服器Cloud
- 程式碼簽名證書出錯的原因及解決方法