當前位置:學者齋 >

IT認證 >Linux認證 >

如何避免出現殭屍進程

如何避免出現殭屍進程

所謂殭屍進程,就是指子進程結束後,其實並沒有真正被銷燬,而是留下一個稱為殭屍進程(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進程了,也不可能會出現殭屍進程啦

  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-hk/itrz/linux/9vzn0j.html