分析一下fork() 函数。
代码
#include <stdio.h>
#include <sys/types.h>
int main(){
pid_t pid;
pid = fork();
if(pid == 0){
printf("Run in Child process. \n");
}else{
printf("Run in Parent process. PID %d. \n", pid);
}
}
代码输出
Run in Child process.
Run in Parent process. PID 29214.
代码分析
fork函数有三种返回值。
- 大于零表明执行成功;
- 等于零表明创建子进程;
- 小于零表明执行失败;
为什么if else 会执行两次?
首先我的去理解一下,fork函数是用来创建子进程的。
创建的新进程可以理解为对代码的临时复制,又或者是父进程的一个副本。从一维空间到二维空间。fork对父进程的返回其创建的新进程的进程ID(29214)。对新创建的子进程则是返回0。这也是为什们if语句会进行两次不同的判断,输出两个printf。