免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 C/C++ wait()?
最近访问板块 发新帖
查看: 4057 | 回复: 9
打印 上一主题 下一主题

wait()? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-11 19:31 |只看该作者 |倒序浏览
想用wait()来获得任一子进程的结束

#include "sys/types.h"
#include "sys/wait.h"
#include "stdio.h"
main()
{
        pid_t pid;
        if((pid=fork())<0)
        {printf("fork error.";
                exit(0);
        }
        else if (pid==0)
        {
                printf("1 ID:%d\n",getpid());
                if ((pid=fork())<0)
                {printf("fork error.";
                        exit(0);
                }
                else if (pid==0)
                {        printf("2 ID:%d\n",getpid());
                        exit(0);
                }
                else sleep(2);
        }
        else printf("ID:%d end.",wait(NULL));
}

应该是 “2 ID” 先结束吧,但是输出是:
1 ID:x
2 ID:y
//等两秒
ID:x end.
小弟新来!谢了先![/code][/code]

论坛徽章:
0
2 [报告]
发表于 2003-06-11 22:18 |只看该作者

wait()?

楼上的你觉得结果有什么不妥吗?
偶觉得很正常啊。

论坛徽章:
0
3 [报告]
发表于 2003-06-11 23:01 |只看该作者

wait()?

我觉得main应该有个进程,wait 是等待 1 ID或者2 ID有一个结束后就执行;
而 1 ID sleep(2),2 ID输出就exit了,所以是 2ID先结束,
else printf("ID:%d end.",wait(NULL)); 的输出应该是:ID:y end.(2 ID)

对吗?

论坛徽章:
0
4 [报告]
发表于 2003-06-12 09:40 |只看该作者

wait()?

你WAIT的地方是ID2进程的父亲的父亲,应该在ID1里的那个ELSE里WAIT

论坛徽章:
0
5 [报告]
发表于 2003-06-12 10:48 |只看该作者

wait()?

[quote]原帖由 "blublusky"]你WAIT的地方是ID2进程的父亲的父亲,应该在ID1里的那个ELSE里WAIT[/quote 发表:
     
那如果我希望没一个子进程结束时我都可以得到它,是否我每次pid=fork()后,
pid>;0处都要wait????

论坛徽章:
0
6 [报告]
发表于 2003-06-12 12:53 |只看该作者

wait()?

blublusky 写到:
你WAIT的地方是ID2进程的父亲的父亲,应该在ID1里的那个ELSE里WAIT

wait()不能对所有的子孙进程都等待结束吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-06-12 13:08 |只看该作者

wait()?

if((pid=fork())<0)
{printf("fork error.";
exit(0);
}
else if (pid==0)
{
printf("1 ID:%d\n",getpid());
if ((pid=fork())<0)
{printf("fork error.";
exit(0);
}
else if (pid==0)
{ printf("2 ID:%d\n",getpid());
exit(0);
}
else sleep(2);
}
else printf("ID:%d end.",wait(NULL));
}
如上代码导致产生许多的子进程和孙子进程。

如果位了测试wait或者waitpid或wait3或wait4系列函数的功能和用法可以用层次比较小的frok。当然如上的代码可以保证让所有的子进程wait完。
在第一个fork的父亲用waitpid,第二个fork的父亲用waitpid。如果多个,循环调用waitpid实现。

论坛中类似的问题讨论了很多。可以参考。

论坛徽章:
0
8 [报告]
发表于 2003-06-12 18:22 |只看该作者

wait()?

原帖由 "蓝色键盘" 发表:
if((pid=fork())<0)
{printf("fork error.";
exit(0);
}
else if (pid==0)
{
printf("1 ID:%d\n",getpid());
if ((pid=fork())<0)
{printf("fork error.";
exit(0);
}
else if (pid==..........
   
对呀,父进程都会执行printf("ID:%d end.",wait(NULL));
所以都会释放,是这样么?/

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-06-12 18:41 |只看该作者

wait()?

父进程创建一个子进程。子进程又创建了子进程。
最后wait的时候,父进程处理了创建的第一个子进程。
第一个子进程wait了父进程的孙子。

论坛徽章:
0
10 [报告]
发表于 2003-06-13 18:30 |只看该作者

wait()?

反复看了书,回顾了下忘了的e文,总算明白了。
只wait子进程的
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP