首頁  >  文章  >  運維  >  linux殭屍行程是什麼意思

linux殭屍行程是什麼意思

WBOY
WBOY原創
2022-07-15 10:53:311762瀏覽

linux殭屍進程是一個已經終止但是其父進程尚未對其進行善後處理獲取終止進程的有關資訊的進程;殭屍進程是當子進程比父進程先結束,而父進程又沒有回收子程序,釋放子程序佔用的資源,此時子程序將成為殭屍程序。

linux殭屍行程是什麼意思

本教學操作環境:linux7.3系統、Dell G3電腦。

linux殭屍進程是什麼意思

殭屍進程是指一個已經終止、但是其父進程尚未對其進行善後處理獲取終止進程的有關資訊的進程

殭屍行程是當子行程比父行程先結束,而父行程又沒有回收子行程,釋放子行程佔用的資源,此時子行程將成為一個殭屍行程。如果父行程先退出 ,子行程被init接管,子行程退出後init會回收其所佔用的相關資源

我們都知道行程的工作原理。我們啟動一個程序,開始我們的任務,然後等任務結束了,我們就停止這個進程。進程停止後, 該進程就會從進程表中移除。

你可以透過 System-Monitor 查看目前進程。

In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie. 在UNIX 系統中,一個進程結束了,但是他的父進程沒有等待(呼叫wait / waitpid)他, 那麼他將變成一個殭屍行程。但是如果該進程的父進程已經先結束了,那麼該進程就不會變成殭屍進程, 因為每個進程結束的時候,系統都會掃描當前系統中所運行的所有進程, 看有沒有哪個進程是剛剛結束的這個進程的子進程,如果是的話,就由Init 來接管他,成為他的父進程

擴展知識

##怎麼看殭屍行程

利用指令ps,可以看到有父行程ID為1的行程是孤兒行程;s(state)狀態為Z的是殭屍行程。

注意:孤兒進程(orphan process)是尚未終止但已停止(相當於前台掛起)的進程,但其父進程已經終止,由init收養;而殭屍進程則是已終止的進程,其父進程不一定終止。

怎麼來清除殭屍行程

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

把父進程殺掉。父進程死後,殭屍行程成為"孤兒進程",過繼給1號進程init,init始終會負責清理殭屍進程,關機或重啟後所有殭屍進程都會消失。

例如,如果PID 5878 是一個殭屍進程,它的父進程是PID 4809,那麼要殺死殭屍進程(5878),您可以結束父進程(4809):

$ sudo kill -9 4809  #4809 is the parent, not the zombie

殺死父進程時要非常小心,如果一個進程的父進程就是PID 1 ,並且你還殺死了它,那麼系統將直接重啟!

推薦學習:

Linux影片教學#

以上是linux殭屍行程是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn