一个现有进程可以调用fork()
函数创建一个新进程(即子进程)。fork()
函数被调用一次但返回两次,两次返回的唯一区别是子进程中返回0
而父进程中返回子进程PID
。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。父、子进程间共享的存储空间只有代码段。
函数定义:
pid_t fork(void);
pid_t
是一个宏定义,其实质是int
,被定义在#include<sys/types.h>
中。返回值:若成功调用一次则返回两个值,子进程返回
0
,父进程返回子进程PID
;出现错误则返回-1
所需的头文件:
#include<unistd.h>
、#include<sys/types.h>
fork()应用示例1
|
在语句fpid=fork()
之前,只有一个进程在执行该段源码;但在fpid=fork()
语句之后,就有两个进程在执行,这两个进程几乎完全相同。fork()
函数是将父进程当前的所有值复制到子进程(子进程只有少数值与父进程不同),而在执行fpid=fork()
时,进程已执行int count=0
;因为两个进程的变量是相互独立、存储于不同的地址(也因此可以通过PID来识别父、子进程,PID也是进程的一个变量),所以父、子进程执行完毕后的变量count
均为1
。
fork()应用示例2
|
连续调用2次fork()
函数,生成3个子进程。
参考资料: