Linux中的的fork函数
更新日期:
文章目录
Linux进程的fork()函数
#include
pid_t fork(void);
一个现有的进程可以调用fork创建一个新的进程。
返回值: 子进程中返回0,父进程返回子进程的ID,出错返回-1.如下:
子进程是父进程的副本。例如:子进程获得父进程的数据空间、堆和栈的副本(主要是数据结构的副本)。父子进程不共享这些存储空间部分。父子进程共享正文段。由于fork之后经常归属exec,所以现在很多实现并不指向一个父进程数据的完全复制。作为替代,使用了写时拷贝的技术。这些区域有父子进程所共享,而且内核将他们的访问权限改变为只读。如果父子进程中的人一个视图修改这些区域,则内核只为修改区域的那块内存制作一个副本。
所以子进程对变量所做的更改并不影响父进程中该变量的值。
⼀般来说fork之后⽗进程和⼦进程的执⾏顺序是不确定的,这取决于内核的调度算法。

## 案例一 ##
## 程序分析: ##

## 运行结果 ##

## 解释 ##

由于子进程里没有对i变量进行设置,所以i为父子进程所共享。
1、i==0时,父进程fork一次,产生子进程,父子进程个调用一次printf;
2、(1)i==1时,父进程再fork一次,产生子进程,父子进程个调用一次printf;
(2)子进程也fork一次,产生子进程,相对的他称为父进程,各调用一次printf;
3、i==2时;推出循环。
综上:3次fork,6次printf;