一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事。但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。
来看看实例:
int main()
{
int i = 0;
for(; i < 2; i++)
{
fork();
printf("A\n");
}
exit(0);
}
判断最终的输出结果有多少个“A”?
答案是6个,来看分析
代码按顺序执行,在执行到fock()后,首先给复制的新的进程分配资源,然后将父进程的所有信息复制到子进程当中,紧接着子进程便从fock()处进行代码执行,这个过程中尤其需要注意的是父进程中 i 的值的变化。图解如下: