最诡异的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