如何避免出现僵尸进程
所谓僵尸进程,就是指子进程结束后,其实并没有真正被销毁,而是留下一个称为僵尸进程(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权限管理基本知识大全
Linux系统有什么基本权限,权限管理命令是什么?下面跟yjbys小编一起来看看吧!一、基本权限linux权限机制采用UGO模式。其中u(user)表示所属用户、g(group)表示所属组、o(other)表示除了所属用户、所属组之外的情况。u、g、o都有读(read)、写(write)、执行(excute...
-
Linux解压缩命令详解2016
在Linux下的tar压缩解压缩命令是什么呢?有什么是必须记得的命令吗?下面跟yjbys小编一起来学习一下吧!tar-c:建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但...
-
学习Linux的一些建议
RHCE的难度可算是最高,因为在很多人的心目中,RHCE是继CCIE之后另一张最难考取的专业证书。下面是小编整理的关于学习Linux的一些建议,欢迎大家参考!为什么要得到它是那么困难?当然是要通过RHCE的LabTest测验部份,除此之外,其考试费亦相当昂贵,每一次参加RHCE的考试费...
-
linux配置dns服务器配置命令
Linux系统的DNS服务器怎么配置,配置命令有哪些?下面跟yjbys小编一起来了解一下吧!一、实验目的熟悉Linux系统中DNS服务器的配置方法。理解配置过程的基本步骤的.作用。二、实验任务(1)建立正向搜索区域,为网络个台服务器建立主机记录、别名记录。为网络建立邮件...