您的位置:首页 > 其它

避免僵死进程实例

2011-03-31 19:14 176 查看
一个进程已经终止但其父进程尚未对其进行回收(获得终止子进程的有关信息,释放它占用的资源)的进程被称为僵死进程。

避免僵死进程的出现的一种办法是父进程调用wait、waitpid等待子进程结束,但这样做有一个弊端就是在子进程结束前父进程会一直阻塞,不能做任何事情。另外一种更好的方法就是调用两次fork函数。

源代码如下:

#include<stdio.h>

#include<unistd.h>

#include<sys/wait.h>

int main(){

pid_t pid;

if((pid = fork()) < 0){ //创建子进程

perror("fork");

}else if(pid == 0){ //子进程1

if((pid = fork()) < 0){ //由子进程1创建子进程2

perror("fork");

}

else if(pid > 0){

exit(0); //子进程1结束

}

else{ //子进程2

sleep(2);

printf("second child,parent pid = %d/n",getppid()); //打印子进程2的父进程

exit(0);

}

}

else{ //父进程

/* do something else*/

}

}

因为子进程1创建完子进程2后退出,所以子进程2变成孤儿进程,自动被init进程收养。当子进程2结束时,init进程对子进程2进行了回收,避免了僵死进程的出现。其运行结果如下所示:

#./zomble

#second child,parent pid =1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: