首页 新闻 搜索 专区 学院

最诡异的Linux fork进程(平时我们都在用)

0
悬赏园豆:5 [已关闭问题] 关闭于 2014-11-27 13:19

从来没有遇到过。。。

  运行环境:在Linux自带的文本编辑器中输入C程序,在shell中编译运行,下面直接看代码和运行结果。

第一个代码:#include<stdio.h>

      #include<stdlib.h>

      #include<unistd.h>

      #define N 2

      int main()

      {

        int i;

        pid_t pid;

        for(i = 0; i < N; i++)

        {

          pid = fork();

          if(pid == 0)

          {

            printf(" %d ",  0);

            exit(100+i);

          }

          else

flag:         printf(" %d ",  pid);

        }

        printf("over\n");

        exit(0);

      }

结果是:  0  2571  0  2571  2572  over

  第一段的结果在想了很久之后都没能想通,为什么第二个0后面会输出两个数呢?然后准备在flag标记的那个printf后加个"\n"让其格式整齐一点发到博客园上问大家呢,结果加了“\n”后输出的结果却是下面我写的那样,更迷糊了,希望哪位大侠知道帮忙解答一下。

第二段:把第一段的flag那行改为printf(" %d\n", getpid(), pid);

结果为:  0    2598

      0    2599

    over

一零零一的主页 一零零一 | 初学一级 | 园豆:55
提问于:2014-11-06 23:17
< >
分享
所有回答(1)
0

你把fork放到了for循环中。这本来就是一个不太科学的决定啊。在for循环中让子程序先exit终止,可能就不会有这样的问题存在了。

panrui | 园豆:202 (菜鸟二级) | 2016-10-07 19:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册