父程序先於子程序終止,則子程序變成孤兒程序(乙個臨時中間狀態),系統很快將孤兒程序的父程序設定為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 孤兒程序 乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子...