如何避免出现僵尸进程
来源:才华咖 本文已影响2.25W人
来源:才华咖 本文已影响2.25W人
所谓僵尸进程,就是指子进程结束后,其实并没有真正被销毁,而是留下一个称为僵尸进程(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进程了,也不可能会出现僵尸进程啦
开车如何避免疲劳驾驶
如何避免在面试中出洋相
如何避免装修陷阱
如何避免瑜伽伤害
英国留学文书写作必须避免出现的错误
打羽毛球如何避免拉伤
如何避免沟通漏斗原理
如何避免汽车追尾?
如何避免出现僵尸进程
新手开车如何避免违章
新手开车如何避免碰瓷
如何避免碰瓷发生
如何避免交通违章行为-有效避免交通违章行为的方法
如何避免早教误区
如何避免创业风险
外出时如何避免遭受雷击
如何避免中式英语
如何避免提单过期
如何避免交通事故
如何在简历中有效避免不利因素
如何避免跨国物流纠纷-有效避免跨国物流纠纷的七大技巧
新手开车如何避免扣分
避免在中级职称计算机考场出现的失误
打网球如何避免受伤
如何避免被“蹭网”