僵尸进程的产生,危害和解决方案
生活随笔
收集整理的這篇文章主要介紹了
僵尸进程的产生,危害和解决方案
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
概念
僵死狀態(tài)(Zombies)是一個(gè)比較特殊的狀態(tài)。
當(dāng)進(jìn)程退出并且父進(jìn)程沒有讀取到子進(jìn)程退出的返回代碼時(shí)就會(huì)產(chǎn)生僵尸進(jìn)程。僵尸進(jìn)程會(huì)以終止?fàn)顟B(tài)保持在進(jìn)程表中,并且會(huì)一直在等待父進(jìn)程讀取退出狀態(tài)代碼。所以,只要子進(jìn)程退出,父進(jìn)程還在運(yùn)行,但父進(jìn)程沒有讀取子進(jìn)程狀態(tài),子進(jìn)程進(jìn)入Z狀態(tài)
產(chǎn)生原因
在子進(jìn)程終止后到父進(jìn)程調(diào)用wait()前的時(shí)間里,子進(jìn)程被稱為zombie;
a. 子進(jìn)程結(jié)束后向父進(jìn)程發(fā)出SIGCHLD信號(hào),父進(jìn)程默認(rèn)忽略了它
b. 父進(jìn)程沒有調(diào)用wait()或waitpid()函數(shù)來等待子進(jìn)程的結(jié)束
c. 網(wǎng)絡(luò)原因有時(shí)會(huì)引起僵尸進(jìn)程;
危害
- 占用系統(tǒng)資源
- 內(nèi)存泄漏
如何防止僵尸進(jìn)程
- 讓僵尸進(jìn)程成為孤兒進(jìn)程,由init進(jìn)程回收;(手動(dòng)殺死父進(jìn)程)
- signal(SIGCHLD, SIG_IGN); 忽略SIGCHLD信號(hào),這是一個(gè)常用于提升并發(fā)服務(wù)器性能的技巧。因?yàn)椴l(fā)服務(wù)器常常fork很多子進(jìn)程,子進(jìn)程終結(jié)之后需要服務(wù)器進(jìn)程去wait清理資源。如果將此信號(hào)的處理方式設(shè)置為忽略,可讓內(nèi)核把僵尸進(jìn)程轉(zhuǎn)交給init進(jìn)程去處理,省去了大量僵尸進(jìn)用系統(tǒng)資源。
- 2) 調(diào)用fork()兩次;
- 3) 捕捉SIGCHLD信號(hào),并在信號(hào)處理函數(shù)中調(diào)用wait函數(shù);
- https://blog.csdn.net/csdn_kou/article/details/81057339
wait()和waitpid()的參數(shù)解析
https://blog.csdn.net/csdn_kou/article/details/81091191
總結(jié)
以上是生活随笔為你收集整理的僵尸进程的产生,危害和解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node.js中req.params的问
- 下一篇: gdb调试常用命令速查(段错误调试)