免费注册 查看新帖 |

Chinaunix

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

帮忙看一下为什么父进程不等待子进程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-21 16:27 |只看该作者 |倒序浏览
int main(void){
    pid_t pid1,pid2;
    printf("The parent's pid is: %d.\n",getpid());
    //create new process pid1
    pid1 = fork();
    //if son process pid1,sleep(10)
    if ( pid1 == 0 ) {
        for(int i=2; i>;0; i--) {sleep(5);}
        printf("pid1 exit\n";
        exit(0);
    }

    //if father process,create new process pid2
    else if ( pid1 >; 0 ){
        printf("pid1 is: %d\n",pid1);
        pid2 = fork();
        //if son precess pid2,sleep(30)
        if ( pid2 == 0 ) {
            for(int i=2; i>;0; i--) {sleep(15);}
            printf("pid2 exit\n";
            exit(0);
        }
        //if father process,
        else if ( pid2 >; 0 ){
           printf("pid2 is: %d\n",pid2);
           waitpid( -1, NULL, 0 );
           printf("exit!!!\n";
        }
        else printf("There was an error with forking pid2!\n";
    }
    else printf("There was an error with forking pid1!\n";
}
程序就是这样的,可为什么父进程不等待进程2执行完才退出,而是每当进程1结束,父进程就输出EXIT?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-04-21 16:35 |只看该作者

帮忙看一下为什么父进程不等待子进程

把代码编辑一下吧。
waitpid( -1, NULL, 0 );
应该用
while(waitpid( -1, NULL, 0 ));

论坛徽章:
0
3 [报告]
发表于 2004-04-21 16:39 |只看该作者

帮忙看一下为什么父进程不等待子进程

看来是我理解错了!
这么说的话,waitpid的意思应该是只要子进程有任何一个退出,父进程就继续执行
而不是要等待所有的子进程!是这样吗?

论坛徽章:
0
4 [报告]
发表于 2004-04-21 16:49 |只看该作者

帮忙看一下为什么父进程不等待子进程

改成这样还是不行
子进程都执行完了,父进程还是在循环里等待!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-04-21 17:14 |只看该作者

帮忙看一下为什么父进程不等待子进程

抱歉,错了。
while(waitpid( -1, NULL, 0 ) >; 0 );
告诉你把代码编辑一下,怎么不编辑呢?
看起来太难受了。

论坛徽章:
0
6 [报告]
发表于 2004-04-21 17:20 |只看该作者

帮忙看一下为什么父进程不等待子进程

不好意思,下次一定记得!
不过这个语句和上面那个语句有什么区别呢?
当子进程全部执行完时,waitpid返回值应该是0吧,那么上面那个也应该直接退出循环啊!

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

帮忙看一下为什么父进程不等待子进程

while(waitpid( -1, NULL, 0 ));
等同与
while(waitpid( -1, NULL, 0 ) != 0);

具体
man waitpid
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP