zoukankan      html  css  js  c++  java
  • 最诡异的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

  • 相关阅读:
    Hive 窗口函数LEAD LAG FIRST_VALUE LAST_VALUE
    xargs命令
    left semi join VS left join
    静态类静态属性静态方法
    DATASET()用法
    更改数据,ExecuteNonQuery()
    SqlDataReader
    数据适配器
    数据库连接-引用配置文件
    sql获取当前时间
  • 原文地址:https://www.cnblogs.com/yilinglingyi/p/4080118.html
Copyright © 2011-2022 走看看