pid_t fork();
完全拷贝一份内存与数据到子进程。父进程和子进程同时运行。返回的0为子进程;父进程返回子进程的PID。谁能最先抢到CPU不确定。
返回值:
-1:失败。
0:子进程逻辑控制流。
其他(返回值为子进程的PID):父进程逻辑控制流。
本质:
复制+分叉。
特点(4):
1.调用一次,返回两次。
2.会额外分出一个相同但是独立的地址空间。
3.并发执行。
并发:两个或者多个进程在同时存在。
进程指令同时或者交替执行;单核。
并行:两个或者多个进程在同时执行。
是一种特殊的并发;多核。
4.共享文件。
代码示范:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int i = 100;
int main(){
int j=100;
FILE* fd = fopen("./test","w+");
pid_t pid = fork();
if(pid == 0){// child
int k;
for(k=0;k<10000;k++)
fprintf(fd,"this is childi%d\t j%d\n",++i,++j);
}else{ //father
int k;
for(k=0;k<10000;k++)
fprintf(fd,"this is fatheri%d\t j%d\n",--i,--j);
}
fclose(fd);
exit(0);
}