你将了解到以下内容:
fork()函数功能
vfork()函数功能
fork()&vfork()区别比较
/-----------------------------------------------------------------------------------------------------------------------------------------/
1.fork()简介
#include <unistd.h>
pid_t fork(void); //返回值:子进程中返回0,父进程返回子进程ID,出错返回-1
fork英文译“叉"、”分支“,专业领域又名"复刻",从其翻译不难猜出它的大概作用。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。
fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID(注意上面说的执行完fork后,父、子进程都跑起来)。我们用一下例子简单验证其返回值。
2.fork()使用
#include <unistd.h>
#include <stdio.h>
/*
* pid_t fork();
* return :in parent process :child process ID
* in child process :0
* if error :return < 0
*/
int main(void)
{
pid_t fpid; //变量类型根据fork返回值类型
int count = 0;
if ((fpid = fork()) < 0)
printf("sorry error fork\n");
else if (fpid == 0)
{
printf("I am the child process,my process id is %d\n", getpid());
printf("我是子进程\n");
count++;
}
else
{
printf("I am the parent process, my process id is %d\n", getpid());
printf("我是父进程\n");
count++;
}
printf("统计结果:count:%d\n",count);
return 0;
}
运行结果是:
I am the parent process, my p