fork:一次调用,两个返回值
fork 函数用于在Linux中创建新进程,英文本意是叉子
,fork系统调用就像是叉子一样,寓意一分为二,一次调用,两个返回值
fork执行后发生了什么?
- fork函数执行后,后将存在两个进程,且每个进程都会从 fork()
的返回处继续执行 - 新的子进程几近于对父进程的翻版:子进程获得父进程的栈、数据段、堆和执行文本段的拷贝
- 执行 fork()之后,每个进程均可修改各自的栈数据、以及堆段中的变量,而并不影响另一进程
- 父进程的fork返回值为子进程的pid,子进程的fork返回值为0
代码解析
#include<unistd.h>
#include<stdio.h>
int
main(){
pid_t pid = fork();
if (pid == -1) {
printf("fork error\n");
} else if(pid == 0){
printf("this is the child process\n");
} else if(pid > 0){
printf("this is the parent process\n");
}
return 0;
}
$ vim fk.c
$ gcc fk.c
$ ./a.aout
- 执行第五行fork()后,进程一分为二,父进程fork返回值为子进程的pid,子进程的返回值为0