下面有一个很有意思的程序:
#include <sys/types.h>
#include <unistd.h>
int main()
{int i;
for( i= 0; i< 3; i++)
{int pid= fork();
if(pid== 0)
{printf("son\n");
}
else
{printf("father\n");
}
}
return 0;
}

大家想想看最后将出现几个son 几个father呢?
。
。
。
。
。
。
。
对一下答案吧:
[hardy@localhost fork]$ ./fork
father
son
son
son
father
father
son
father
son
son
father
father
son
father
总共7个son7个father。你答对了么?
这道题需要在纸上画画才好理解
for i=0 1 2
father father father
son
son father
son
son father father
son
son father
son
其中每一行分别代表一个进程的运行打印结果。
当产生子进程的时刻,子进程打印son,当子进程调用fork的生成子子进程,他就提升为father。
总结来说,father永远打印father,son在fork之前是son,fork之后就为father,同时生成新的son。
这个比喻就像真正的父子,孩子长大了生了小孩,孩子就成了父亲。而父亲永远是父亲。
