如何避免出現殭屍程序
所謂殭屍程序,就是指子程序結束後,其實並沒有真正被銷燬,而是留下一個稱為殭屍程序(Zombie)的'資料結構,它幾乎放棄了所有記憶體空間,沒有任何可執行程式碼,也不能被排程,僅僅在程序列表中保留一個位置,記載程序的退出狀態等供其他程序蒐集,此時即使用root身份kill -9也不能將其殺死,此時唯一的補救辦法就是找到它的父程序,並將其殺死,此時殭屍程序過繼給init,由init負責回收。那麼怎樣用兩次fork來避免殭屍程序呢
#include
#include
#include
#include
#include
int main()
{
pid_t pid;
pid=fork();
if(pid<0)
{
perror("child1 create failedn");
exit(-1);
}
else if(pid==0)
{
/*child1*/
pid=fork();
if(pid<0)
{
perror("child2 create failedn");
exit(-1);
}
else if(pid>0)
{
/*child1結束*/
exit(0);
}
/*child2*/
sleep(2);//因為不知道child1和child2哪個先執行,所以讓child2先睡兩秒
/*TODO child2*/
exit(0);
}
/*parent*/
if(waitpid(pid,NULL,0)!=pid) //wait for child1
{
perror("waitpid errorn");
exit(-1);
}
/*TODO parent*/
exit(0);
}
總的說來,其實就是父程序parent建立一個子程序child1,child1再建立它的子程序child2,此時結束child1,child2就自然過繼給init啦,這樣以後無論怎樣,當child2結束時直接就由init釋放,再也影響不到parent程序了,也不可能會出現殭屍程序啦
-
Linux Shell文字處理工具彙總篇
本文將介紹Linux下使用Shell處理文字時最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和引數都是最常用和最為實用的;我對shell指令碼使用的原則是命令單行書寫,儘量不要超過2行;如果有更為複雜的任務需求,還是考慮python吧...
-
關於ocp認證考試試題
inux承襲的是開放式原始碼(OpenSource)的精神,所有LinuxSourceCode(原始碼)均可免費取得,這使得它相對其它的作業系統(尤其是昂貴的WindowsNT)而言價格極其便宜。下面是小編整理的關於ocp認證考試試題,歡迎大家參考!(1)需要登入進入線上考試系統才能檢視答案及解...
-
Linux檔案系統簡介
Linux和Windows作業系統中的檔案系統些不同,在學習使用Linux之前,能夠了解這個不同之處助於後續的學習。下面是小編整理的關於Linux檔案系統簡介,希望可以幫助大家!一、Linux和Windows檔案系統下面分別簡單介紹一下啟動Windows和Linux之後,它們是怎樣看待自己世界...
-
Linux系統安全的九個關鍵點
1.使用SELinuxSELinux是用來對Linux進行安全加固的,有了它,使用者和管理員們就可以對訪問控制進行更多控制。SELinux為訪問控制添加了更細的顆粒度控制。與僅可以指定誰可以讀、寫或執行一個檔案的許可權不同的是,SELinux可以讓你指定誰可以刪除連結、只能追加、移動...