版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Linux僵尸進(jìn)程詳細(xì)解析在fork(/execve(過程中,假設(shè)子進(jìn)程結(jié)束時父進(jìn)程仍存在,而父進(jìn)程fork(之前既沒安裝SIGCHLD信號處理函數(shù)調(diào)用waitpid(等待子進(jìn)程結(jié)束,又沒有顯式忽略該信號,則子進(jìn)程成為僵尸進(jìn)程,無法正常結(jié)束,此時即使是root身份kill-9也不能殺死僵尸進(jìn)程。補救辦法是殺死僵尸進(jìn)程的父進(jìn)程(僵尸進(jìn)程的父進(jìn)程必然存在,僵尸進(jìn)程成為孤兒進(jìn)程,過繼給1號進(jìn)程init,init始終會負(fù)責(zé)清理僵尸進(jìn)程。僵尸進(jìn)程是指的父進(jìn)程已經(jīng)退出,而該進(jìn)程dead之后沒有進(jìn)程接受,就成為僵尸進(jìn)程.(zombie進(jìn)程怎樣產(chǎn)生僵尸進(jìn)程的:一個進(jìn)程在調(diào)用exit命令結(jié)束自己的生命的時候,其
2、實它并沒有真正的被銷毀,而是留下一個稱為僵尸進(jìn)程(Zombie的數(shù)據(jù)結(jié)構(gòu)(系統(tǒng)調(diào)用exit,它的作用是使進(jìn)程退出,但也僅僅限于將一個正常的進(jìn)程變成一個僵尸進(jìn)程,并不能將其完全銷毀。在Linux進(jìn)程的狀態(tài)中,僵尸進(jìn)程是非常特殊的一種,它已經(jīng)放棄了幾乎所有內(nèi)存空間,沒有任何可執(zhí)行代碼,也不能被調(diào)度,僅僅在進(jìn)程列表中保留一個位置,記載該進(jìn)程的退出狀態(tài)等信息供其他進(jìn)程收集,除此之外,僵尸進(jìn)程不再占有任何內(nèi)存空間。它需要它的父進(jìn)程來為它收尸,如果他的父進(jìn)程沒安裝SIGCHLD信號處理函數(shù)調(diào)用wait或waitpid(等待子進(jìn)程結(jié)束,又沒有顯式忽略該信號,那么它就一直保持僵尸狀態(tài),如果這時父進(jìn)程結(jié)束了,那
3、么init進(jìn)程自動會接手這個子進(jìn)程,為它收尸,它還是能被清除的。但是如果如果父進(jìn)程是一個循環(huán),不會結(jié)束,那么子進(jìn)程就會一直保持僵尸狀態(tài),這就是為什么系統(tǒng)中有時會有很多的僵尸進(jìn)程。怎么查看僵尸進(jìn)程:利用命令ps,可以看到有標(biāo)記為Z的進(jìn)程就是僵尸進(jìn)程。怎樣來清除僵尸進(jìn)程:1.改寫父進(jìn)程,在子進(jìn)程死后要為它收尸。具體做法是接管SIGCHLD信號。子進(jìn)程死后,會發(fā)送SIGCHLD信號給父進(jìn)程,父進(jìn)程收到此信號后,執(zhí)行waitpid(函數(shù)為子進(jìn)程收尸。這是基于這樣的原理:就算父進(jìn)程沒有調(diào)用wait,內(nèi)核也會向它發(fā)送SIGCHLD消息,盡管對的默認(rèn)處理是忽略,如果想響應(yīng)這個消息,可以設(shè)置一個處理函數(shù)。2.
4、把父進(jìn)程殺掉。父進(jìn)程死后,僵尸進(jìn)程成為孤兒進(jìn)程,過繼給1號進(jìn)程init,init始終會負(fù)責(zé)清理僵尸進(jìn)程.它產(chǎn)生的所有僵尸進(jìn)程也跟著消失。=在Linux中可以用ps auwx發(fā)現(xiàn)僵尸進(jìn)程a all w/ tty, including other users 所有窗口和終端,包括其他用戶的進(jìn)程u user-oriented 面向用戶(用戶友好-w,w wide output 寬格式輸出x processes w/o controlling ttys在僵尸進(jìn)程后面會標(biāo)注ps axf看進(jìn)程樹,以樹形方式現(xiàn)實進(jìn)程列表ps axm會把線程列出來,在linux下進(jìn)程和線程是統(tǒng)一的,是輕量級進(jìn)程的兩種方式。p
5、s axu顯示進(jìn)程的詳細(xì)狀態(tài)=killallkill -15kill -9一般都不能殺掉defunct進(jìn)程用了kill -15,kill -9以后之后反而會多出更多的僵尸進(jìn)程kill -kill pidfuser -k pid可以考慮殺死他的parent process,kill -9 他的parent process= 一個已經(jīng)終止,但是其父進(jìn)程尚未對其進(jìn)行善后處理(獲取終止子進(jìn)程的有關(guān)信息、釋放它仍占用的資源的進(jìn)程被稱為僵死進(jìn)程(Zombie Process。避免zombie的方法:1在SVR4中,如果調(diào)用signal或sigset將SIGCHLD的配置設(shè)置為忽略,則不會產(chǎn)生僵死子進(jìn)程。另
6、外,使用SVR4版的sigaction,則可設(shè)置SA_NOCLDW AIT標(biāo)志以避免子進(jìn)程僵死。Linux中也可使用這個,在一個程序的開始調(diào)用這個函數(shù)signal(SIGCHLD,SIG_IGN;2調(diào)用fork兩次。程序8 - 5 實現(xiàn)了這一點。3用waitpid等待子進(jìn)程返回.=zombie進(jìn)程是僵死進(jìn)程。防止它的辦法,一是用wait,waitpid之類的函數(shù)獲得進(jìn)程的終止?fàn)顟B(tài),以釋放資源。另一個是fork兩次=defunct進(jìn)程只是在process table里還有一個記錄,其他的資源沒有占用,除非你的系統(tǒng)的process個數(shù)的限制已經(jīng)快超過了,zombie進(jìn)程不會有更多的壞處??赡芪ㄒ坏?/p>
7、方法就是reboot系統(tǒng)可以消除zombie進(jìn)程。=任何程序都有僵尸狀態(tài),它占用一點內(nèi)存資源(也就是進(jìn)程表里還有一個記錄,僅僅是表象而已不必害怕。如果程序有問題有機(jī)會遇見,解決大批量僵尸簡單有效的辦法是重起。kill 是無任何效果的fork與zombie/defunct在Unix下的一些進(jìn)程的運作方式。當(dāng)一個進(jìn)程死亡時,它并不是完全的消失了。進(jìn)程終止,它不再運行,但是還有一些殘留的小東西等待父進(jìn)程收回。這些殘留的東西包括子進(jìn)程的返回值和其他的一些東西。當(dāng)父進(jìn)程fork(一個子進(jìn)程后,它必須用wait( 或者waitpid( 等待子進(jìn)程退出。正是這個wait( 動作來讓子進(jìn)程的殘留物消失。自然的
8、,在上述規(guī)則之外有個例外:父進(jìn)程可以忽略SIGCLD 軟中斷而不必要wait(??梢赃@樣做到(在支持它的系統(tǒng)上,比如Linux:main(signal(SIGCLD, SIG_IGN;.fork(;fork(;fork(;現(xiàn)在,子進(jìn)程死亡時父進(jìn)程沒有wait(,通常用ps 可以看到它被顯示為“”。它將永遠(yuǎn)保持這樣直到父進(jìn)程wait(,或者按以下方法處理。這里是你必須知道的另一個規(guī)則:當(dāng)父進(jìn)程在它wait(子進(jìn)程之前死亡了(假定它沒有忽略SIGCLD,子進(jìn)程將把init(pid1進(jìn)程作為它的父進(jìn)程。如果子進(jìn)程工作得很好并能夠控制,這并不是問題。但如果子進(jìn)程已經(jīng)是defunct,我們就有了一點小麻
9、煩???原先的父進(jìn)程不可能再wait(,因為它已經(jīng)消亡了。這樣,init 怎么知道wait( 這些zombie 進(jìn)程。答案:不可預(yù)料的。在一些系統(tǒng)上,init周期性的破壞掉它所有的defunct進(jìn)程。在另外一些系統(tǒng)中,它干脆拒絕成為任何defunct進(jìn)程的父進(jìn)程,而是馬上毀滅它們。如果你使用上述系統(tǒng)的一種,可以寫一個簡單的循環(huán),用屬于init的defunct進(jìn)程填滿進(jìn)程表。這大概不會令你的系統(tǒng)管理員很高興吧?你的任務(wù):確定你的父進(jìn)程不要忽略SIGCLD,也不要wait( 它fork( 的所有進(jìn)程。不過,你也未必要總是這樣做(比如,你要起一個daemon 或是別的什么東西,但是你必須小心編程,如果你是一個fork(的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電競比賽贊助合同3篇
- 2025年度私人購車二手車鑒定評估與售后服務(wù)合同3篇
- 伴你學(xué)第一單元數(shù)學(xué)試卷
- 安徽的全國一卷數(shù)學(xué)試卷
- 二零二五年度房屋租賃抵押與旅游度假合同3篇
- 成人高考考試數(shù)學(xué)試卷
- 2025屆云南大理市鶴慶縣重點中學(xué)中考生物押題卷含解析2
- 小學(xué)語文教學(xué)中的寫作技巧培養(yǎng)
- 小學(xué)數(shù)學(xué)創(chuàng)新型課堂與課外活動的互補性研究
- 2024知識產(chǎn)權(quán)許可使用合同規(guī)定
- 初中音樂欣賞課型互動教學(xué)策略的構(gòu)建及實踐
- 《新媒體運營》高職新媒體運營全套教學(xué)課件
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)教程 課件全套 王曉明 第1-11章 創(chuàng)新與創(chuàng)新能力 -中國國際大學(xué)生創(chuàng)新大賽與“挑戰(zhàn)杯”大學(xué)生創(chuàng)業(yè)計劃競賽
- 2024年蘭州大學(xué)專業(yè)課《金融學(xué)》科目期末試卷B(有答案)
- 初中物理寶典
- 人工智能基礎(chǔ)與應(yīng)用-課程標(biāo)準(zhǔn)
- 綠化養(yǎng)護(hù)工作日記錄表
- 耳尖放血的護(hù)理
- 人工智能趣味科普系列
- 中醫(yī)五臟課件
- 安谷鐵龍煤礦整合技改施工組織設(shè)計樣本
評論
0/150
提交評論