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

  从来没有遇到过。。。

  运行环境:在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

 

posted @   一零零一  阅读(393)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示