如何避免出现僵尸进程
所谓僵尸进程,就是指子进程结束后,其实并没有真正被销毁,而是留下一个称为僵尸进程(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编程的简介
从程序员的角度来看,Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。在LinuxGUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用...
-
关于ocp认证考试试题
inux承袭的是开放式原始码(OpenSource)的精神,所有LinuxSourceCode(源代码)均可免费取得,这使得它相对其它的操作系统(尤其是昂贵的WindowsNT)而言价格极其便宜。下面是小编整理的关于ocp认证考试试题,欢迎大家参考!(1)需要登录进入在线考试系统才能查看答案及解...
-
2017年Linux认证考试试题及答案
Linux认证指获得专业Linux培训后通过考试得到的资格。目前国际上广泛承认的Linux认证有LinuxProfessionalInstitute(简称为LPI)、SairLinux和GNU、Linux+和RedHatCertifiedEngineer。以下是小编整理的关于Linux认证考试试题,欢迎大家练习!1、在设定文件的许可值...
-
2017年Linux认证考试试题
Linux认证指获得专业Linux培训后通过考试得到的资格。目前国际上广泛承认的Linux认证有LinuxProfessionalInstitute(简称为LPI)、SairLinux和GNU、Linux+和RedHatCertifiedEngineer。以下是小编整理的关于Linux认证考试试题,欢迎大家参考!1、你想实现只有自己可...