红联Linux门户
Linux帮助

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

发布时间:2015-09-05 11:00:22来源:linux网站作者:一零零一

从来没有遇到过。

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


经典的Fork解析:http://www.linuxdiyf.com/linux/12690.html

Linux进程之Fork函数:http://www.linuxdiyf.com/linux/11154.html

Linux0.11中的fork实现和一些注意事项:http://www.linuxdiyf.com/linux/8383.html

Linux基础知识:fork,vfork,exec:http://www.linuxdiyf.com/linux/5913.html

在Github和Git上fork之简单指南:http://www.linuxdiyf.com/linux/4822.html