只退出子进程,不退出主进程时,子进程僵死!
如下代码,目的的:退出子进程后,不退出主进程,主进程还需要干其它活。执行下面代码后,用ps看进程信息时,发现子进程僵死了。如果退出主进程,就没有僵死的子进程了。这是为什么呀?
这种情况下,应该怎么正确退出子进程?#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 0;
pid_t pid;
pid = fork();
if(pid)
{
printf("This is father\n");
}else{
printf("This is child\n");
//do sth
return 0;
}
while(1)//do sth else;
return 0;
} 子进程执行完之后必须通过主进程调用wait函数回收,否则就会僵死。主进程退出了,子进程的父进程是pid 1的进程,他会帮忙回收退出的进程,所以不会僵死。
man wait,
man waitpid return 。。。这不是函数啊!进程是这么退出的么???? 回复 3# crazyhadoop
从main return,一个进程结束这个应该没有问题,也可以用exit!
回复 1# hua9537
建议楼主去了解一下wait或者waitpid这两个函数的作用!
回复 3# crazyhadoop
也可以这么玩的。。。。 cjdao 发表于 2012-04-16 08:29 static/image/common/back.gif
回复 1# hua9537
建议楼主去了解一下wait或者waitpid这两个函数的作用!
在主进程中调用这两个函数,对吧?试过,不可以,子进程还是僵死,等主进程退出后,僵死的子进程也才退出。 12. if(pid > 0)//你没判断pid
13. {
14. printf("This is father\n");
15. }else{
16. printf("This is child\n");
17. //do sth
18. exit(0);
19. }
while(wait(&status)){//wait for exit
if(WISEXITED(status))
break;
}
//do something 楼主看一下SIGCHILD和wait 回复 8# fallavor
我的用法有点太对,我试试!谢谢!
页:
[1]
2