當前位置:首頁 » 操作系統 » linux僵屍進程

linux僵屍進程

發布時間: 2024-08-22 16:26:25

linux下僵屍態的進程是怎樣引起的 csdn或chinaunix

當然會成為僵屍進程,你的C、D子進程比父進程先結束,
在fork ()/execve()過程中,假設子進程結束時父進程仍存在,而父進程fork()之前既沒安裝SIGCHLD信號處理函數調用waitpid()等待子進程結束,又沒有顯式忽略該信號,則子進程成為僵屍進程,無法正常結束,此時即使是root身份kill -9也不能殺死僵屍進程。補救辦法是殺死僵屍進程的父進程(僵屍進程的父進程必然存在),僵屍進程成為"孤兒進程",過繼給1號進程init,init始終會負責清理僵屍進程。
僵屍進程的避免:
(1) 父進程通過wait和waitpid等函數等待子進程結束,這會導致父進程掛起。
(2) 如果父進程很忙,那麼可以用signal函數為SIGCHLD安裝handler,因為子進程結束後, 父進程會收到該信號,可以在handler中調用wait回收。
(3) 如果父進程不關心子進程什麼時候結束,那麼可以用signal(SIGCHLD, SIG_IGN) 通知內核,自己對子進程的結束不感興趣,那麼子進程結束後,
內核會回收, 並不再給父進程發送信號。
(4) 還有一些技巧,就是fork兩次,父進程fork一個子進程,然後繼續工作,子進程fork一 個孫進程後退出,那麼孫進程被init接管,孫進程結束後,
init會回收。不過子進程的回收 還要自己做。

Ⅱ 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系統中,一個進程結束了,但是它的父進程沒有等待它,那麼它將變成一個僵屍進程。但是如果該進程的父進程已經先結束了,那麼該進程就不會變僵屍進程,因為每個進程結束的時候,系統都會掃描當前系統中所運行的所有進程,看有沒有哪個進程是剛剛結束的這個進程的子進程,如果是的話,就由init來接管他,成為他的父進程。

怎麼查看僵屍進程?

利用命令ps,可以看到有父進程ID為1的進程是孤兒進程;s狀態為z的是僵屍進程。

注意:孤兒進程是尚未終止但已停止的進程,但其父進程已經終止,由init收養;而僵屍進程則是已終止的進程,其父進程不一定終止。

熱點內容
手機通話降噪功能安卓在哪裡設置 發布:2024-11-25 07:21:03 瀏覽:117
c基礎java 發布:2024-11-25 07:20:50 瀏覽:70
罪惡都市安卓內置菜單在哪裡下載 發布:2024-11-25 07:09:51 瀏覽:706
資料庫附加資料庫 發布:2024-11-25 07:08:08 瀏覽:403
支付寶支付密碼如何修改 發布:2024-11-25 06:38:47 瀏覽:923
java開發要學習什麼技術 發布:2024-11-25 06:20:28 瀏覽:1000
java猿 發布:2024-11-25 06:18:36 瀏覽:127
如何刷安卓44 發布:2024-11-25 06:18:32 瀏覽:529
安卓手機怎麼限制app時間 發布:2024-11-25 06:14:15 瀏覽:403
福建虛擬伺服器管理軟體雲伺服器 發布:2024-11-25 06:05:46 瀏覽:106