免费注册 查看新帖 |

Chinaunix

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

fork子进程的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-07 11:44 |只看该作者 |倒序浏览
#include <stdio.h>;
#include <sys/types.h>;
#include <unistd.h>;

void main(void)
{
        int i;
        printf("\nInitial process PID%6d\t PPID%6d\t  GID6d\n",getpid   (),getppid(),getpgid(0));
        for(i = 0;i<3;++i)
                if(fork() == 0)
                        printf("new process PID%6d\tPPID%6d\tGID%6d\n",getpid(),getppid(),getpgid(0));
}
他的输出如下:
Initial process PID   156        PPID 18783      GID   156
new process PID   157   PPID   156      GID   156
new process PID   158   PPID   156      GID   156
new process PID   159   PPID   157      GID   156
new process PID   162   PPID   159      GID   156
new process PID   160   PPID   158      GID   156
new process PID   161   PPID   157      GID   156
new process PID   163   PPID   156      GID   156

我的问题是:在for循环中我只调用了3次fork(),为什么输出却有7次呢?

论坛徽章:
0
2 [报告]
发表于 2004-01-07 11:58 |只看该作者

fork子进程的问题

说实在的,你的程序让人非常郁闷~~~
的确,你的本意是fork三次,但是别忘了,主进程和子进程都要运行你所调用的fork。

论坛徽章:
0
3 [报告]
发表于 2004-01-07 12:03 |只看该作者

fork子进程的问题

因为子进程没有退出,所以也要个自完成3次循环.
初学者常见问题,找旧帖把,有答案的. 欢迎来到加州旅店!

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
4 [报告]
发表于 2004-01-07 14:07 |只看该作者

fork子进程的问题

呵呵,建议仔细看书
子进程也要输出啊

论坛徽章:
0
5 [报告]
发表于 2004-01-07 14:38 |只看该作者

fork子进程的问题

我是在判断了fork调用的返回值为0后调用pingtf。所以应该只有子进程才有输出啊。

论坛徽章:
0
6 [报告]
发表于 2004-01-07 14:43 |只看该作者

fork子进程的问题

子进程会继续fork,你把输出结果中的父子关系理一下就清楚了

论坛徽章:
0
7 [报告]
发表于 2004-01-07 14:54 |只看该作者

fork子进程的问题

你的程序是这样的:

PID为156的是父进程,它有三个子进程,就象你所想有的那样:

他们的PID分别为 157(i=0), 158(i=1), 163(i=2);

又由于157的i<2,所以157又fork了两个子进程, 159(i=1), 161(i=2);

158的i也是<2,所以158也fork了一个子进程,160(i=2);

现在159的i也是<2,所以他又fork了一个子进程,162(i=2);

好了,现在你所产生的这七个子进程的i+1都不小于2了,程序也就退出了.

如果你想要得到你想要的结果,请在printf后面调用exit();

论坛徽章:
0
8 [报告]
发表于 2004-01-07 14:59 |只看该作者

fork子进程的问题

你说的对,但为什么会产生7个子进程呢,好像因该是6个。

论坛徽章:
0
9 [报告]
发表于 2004-01-07 15:07 |只看该作者

fork子进程的问题

先学会数数吧.到底七个还是六个,你再数数看?

论坛徽章:
0
10 [报告]
发表于 2004-01-07 15:38 |只看该作者

fork子进程的问题

[quote]原帖由 "benqing"]我是在判断了fork调用的返回值为0后调用pingtf。所以应该只有子进程才有输出啊。 [/quote 发表:

我觉得按找你的想法实现的话应该在for 后面
增加{}
将后面两句括起来,就实现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP