免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5838 | 回复: 12
打印 上一主题 下一主题

只退出子进程,不退出主进程时,子进程僵死! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-15 13:34 |只看该作者 |倒序浏览
如下代码,目的的:退出子进程后,不退出主进程,主进程还需要干其它活。
执行下面代码后,用ps看进程信息时,发现子进程僵死了。如果退出主进程,就没有僵死的子进程了。这是为什么呀?
这种情况下,应该怎么正确退出子进程?
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.     int n = 0;

  6.     pid_t pid;

  7.     pid = fork();

  8.     if(pid)
  9.     {
  10.         printf("This is father\n");
  11.     }else{
  12.         printf("This is child\n");
  13.        //do sth
  14.         return 0;
  15.     }
  16.     while(1)//do sth else;
  17.     return 0;
  18. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-04-15 19:09 |只看该作者
子进程执行完之后必须通过主进程调用wait函数回收,否则就会僵死。主进程退出了,子进程的父进程是pid 1的进程,他会帮忙回收退出的进程,所以不会僵死。
man wait,
man waitpid

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
3 [报告]
发表于 2012-04-15 20:48 |只看该作者
return 。。。这不是函数啊!进程是这么退出的么????

论坛徽章:
1
白羊座
日期:2013-08-22 17:30:33
4 [报告]
发表于 2012-04-16 08:27 |只看该作者
回复 3# crazyhadoop
从main return,一个进程结束这个应该没有问题,也可以用exit!

   

论坛徽章:
1
白羊座
日期:2013-08-22 17:30:33
5 [报告]
发表于 2012-04-16 08:29 |只看该作者
回复 1# hua9537
建议楼主去了解一下wait或者waitpid这两个函数的作用!

   

论坛徽章:
0
6 [报告]
发表于 2012-04-16 12:37 |只看该作者
回复 3# crazyhadoop

也可以这么玩的。。。。

论坛徽章:
0
7 [报告]
发表于 2012-04-16 18:44 |只看该作者
cjdao 发表于 2012-04-16 08:29
回复 1# hua9537
建议楼主去了解一下wait或者waitpid这两个函数的作用!


在主进程中调用这两个函数,对吧?试过,不可以,子进程还是僵死,等主进程退出后,僵死的子进程也才退出。

论坛徽章:
0
8 [报告]
发表于 2012-04-16 23:35 |只看该作者
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

论坛徽章:
0
9 [报告]
发表于 2012-04-18 18:48 |只看该作者
楼主看一下SIGCHILD和wait

论坛徽章:
0
10 [报告]
发表于 2012-05-14 16:04 |只看该作者
回复 8# fallavor

我的用法有点太对,我试试!谢谢!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP