计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。下面是fork函数工作的一个例子。
#include <unistd.h>
#include <stdio.h>
int main ()
{
pid_t fpid; //fork returns fpid
int cnt=0;
fpid=fork();
if (fpid < 0)
printf("error in fork!");
else if (fpid == 0) {
printf("I am the child process, process id : %d\n",getpid());
cnt++;
}
else {
printf("I am the parent process, process id : %d\n",getpid());
cnt++;
}
printf("count: %d\n",cnt);
return 0;
}
运行gcc fork.c -o fork得到fork可执行文件,运行:./fork
得到如下结果:
I am the parent process, process id : 1924
count: 1
I am the child process, process id : 1925
count: 1
在fpid=fork();语句之后,就是两个进程执行从if(fpid<0)开始的代码。由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因此fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。