簡述Linux中的孤兒程序和殭屍程序

2021-10-08 12:18:32 字數 1559 閱讀 9016

父程序先於子程序終止,則子程序變成孤兒程序(乙個臨時中間狀態),系統很快將孤兒程序的父程序設定為init

init程序

孤兒領養程序、孤兒收養院;

作用:

負責作為孤兒程序的父程序,在孤兒程序終止後,**程序釋放資源;

孤兒程序產生

#include

#include

#include

intmain()

if(!pid)

sleep(30

);printf

("the parent process is terminated.\n");

return0;

}

檢視
ps -ajx // 程序快照

| // 管道

grep ./orphan // 過濾器,匹配 ./orphan

程序快照

至少有乙個結果(ps程序),只有乙個說明沒有找到;

注:

s 表示阻塞;

子程序比父程序先結束,而父程序又沒有**子程序,釋放子程序占用的資源,此時子程序將成為乙個殭屍程序;

乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀, 而是留下乙個稱為殭屍程序(zombie)的資料結構(系統呼叫exit,它的作用是 使程序退出,但也僅僅限於將乙個正常的程序變成乙個殭屍程序,並不能將其完全銷毀);

思考殭屍程序是不能使用 kill 命令清除掉的,因為 kill 命令只是用來終止程序的, 而殭屍程序已經終止。

思考!用什麼辦法可清除掉殭屍程序呢?

解答

改寫父程序:wait/waitpid**;

殺死父程序:kill其父程序(殭屍程序的父程序必然存在),殭屍程序成為"孤兒程序",被 init接管,init始終會負責清理殭屍程序,然後**其占用的資源;

殭屍程序產生

#include

#include

#include

intmain()

if(!pid)

sleep(30

);return0;

}

檢視

z 表示 zombie殭屍程序;

ps -ajx |

grep process_name

程序快照

注:

z 表示 zombie殭屍程序;

[ ] 均表示程序已結束;

2020/07/25 11:45

@luxurylu

linux 中的僵死程序和孤兒程序

當我們使用建立程序的函式fork vfork 等,建立了子程序 1.子程序先於父親程序退出,會造成子程序的程序編號無法釋放.程序編號的範圍很大,但不應該隨意浪費 2.子程序後於父親程序退出,子程序會交給init 程序管理.3.乙個程序在執行完畢後,系統會自動清空其存在的程序的相關資源 結合上面說明,...

Linux中的孤兒程序

環境 vmware workstation centos 6.4 x86 64 孤兒程序 1 父程序消失,子程序仍然存在,那麼這個子程序就是孤兒程序。2 孤兒程序的ppid是1,此時子程序的父程序變成init 程式 使用程式,實現乙個孤兒程序,並得到孤兒程序的ppid。程式如下main.c incl...

Linux中殭屍程序和孤兒程序詳解

1 殭屍程序 乙個子程序在其父程序沒有呼叫wait 或waitp程式設計客棧id 的情況下退出,這個子程序就是殭屍程序。如果其父程序還存在而一直不呼叫wait,則該殭屍程序將無法 等到其父程序退出後該程序將被init 執行結果 2 孤兒程序 乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子...