解析Linux作業系統殭屍進程

來源:互聯網
上載者:User

    詳細解析Linux作業系統殭屍進程, 在fork()/execve()過程中,假設子進程結束時父進程仍存在,而父進程fork()之前既沒安裝SIGCHLD訊號處理函數調用waitpid()等待子進程結束,又沒有顯式忽略該訊號,則子進程成為殭屍進程,無法正常結束,此時即使是root身份kill

    在fork()/execve()過程中,假設子進程結束時父進程仍存在,而父進程fork()之前既沒安裝SIGCHLD訊號處理函數調用waitpid()等待子進程結束,又沒有顯式忽略該訊號,則子進程成為殭屍進程,無法正常結束,此時即使是root身份kill-9也不能殺死殭屍進程。補救辦法是殺死殭屍進程的父進程(殭屍進程的父進程必然存在),殭屍進程成為"孤兒進程",過繼給1號進程init,init始終會負責清理殭屍進程。

    殭屍進程是指的父進程已經退出,而該進程dead之後沒有進程接受,就成為殭屍進程.(zombie)進程

    怎樣產生殭屍進程的:

    一個進程在調用exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下一個稱為殭屍進程(Zombie)的資料結構(系統調用exit,它的作用是使進程退出,但也僅僅限於將一個正常的進程變成一個殭屍進程,並不能將其完全銷毀)。在Linux進程的狀態中,殭屍進程

    是非常特殊的一種,它已經放棄了幾乎所有記憶體空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退

    出狀態等資訊供其他進程收集,除此之外,殭屍進程不再佔有任何記憶體空間。它需要它的父進程來為它收屍,如果他的父進程沒安裝SIGCHLD信

    號處理函數調用wait或waitpid()等待子進程結束,又沒有顯式忽略該訊號,那麼它就一直保持殭屍狀態,如果這時父進程結束了,那麼init進程自動

    會接手這個子進程,為它收屍,它還是能被清除的。但是如果如果父進程是一個迴圈,不會結束,那麼子進程就會一直保持殭屍狀態,這就是為什麼系統中有時會有很多的殭屍進程。

    怎麼查看殭屍進程:

    利用命令ps,可以看到有標記為Z的進程就是殭屍進程。

    怎樣來清除殭屍進程:

    1.改寫父進程,在子進程死後要為它收屍。具體做法是接管SIGCHLD訊號。子進程死後,會發送SIGCHLD訊號給父進程,父進程收到此訊號後,執行waitpid()函數為子進程收屍。這是基於這樣的原理:就算父進程沒有調用wait,核心也會向它發送SIGCHLD訊息,儘管對的預設處理是忽略,如果想響應這個訊息,可以設定一個處理函數。

    2.把父進程殺掉。父進程死後,殭屍進程成為"孤兒進程",過繼給1號進程init,init始終會負責清理殭屍進程.它產生的所有殭屍進程也跟著消失。

    ===========================================

    在Linux中可以用

    ps auwx

    發現殭屍進程

    a all w/ tty, including other users 所有視窗和終端,包括其他使用者的進程

    u user-oriented 面向使用者(方便使用)

    -w,w wide output 寬格式輸出

    x processes w/o controlling ttys

    在殭屍進程後面 會標註

    ps axf

    看進程樹,以樹形方式現實進程列表

    ps axm

    會把線程列出來,在linux下進程和線程是統一的,是輕量級進程的兩種方式。

    ps axu

    顯示進程的詳細狀態

    ===========================================

    killall

    kill -15

    kill -9

    一般都不能殺掉 defunct進程

    用了kill -15,kill -9以後 之後反而會多出更多的殭屍進程

    kill -kill pid

    fuser -k pid

    可以考慮殺死他的parent process,

    kill -9 他的parent process

    一個已經終止,但是其父進程尚未對其進行善後處理(擷取終止子進程的有關資訊、釋放它仍佔用的資源)的進程被稱為僵死進程(Zombie Process)。


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.