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

  • 相关阅读:
    qt tableview中如何添加右键菜单且不可编辑单元格
    C++typedef struct和struct的区别
    Qt5配置winpCap
    C++虚函数和纯虚函数的用法和区别
    c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
    C++ windows进程间通信
    C++并发多线程(一)
    Maven无法下载2.1.7.js7版本的itext依赖
    PostgreSQL
    SQL
  • 原文地址:https://www.cnblogs.com/yilinglingyi/p/4080118.html
Copyright © 2011-2022 走看看