#include <stdlib.h>
#include <stdlib.h>
int main(){
int i;
pid_t pid = fork();
printf("xxxxxxxxx\n");
for(i = 0; i < 5; i++){
pid = fork(); //循环创建子进程
if(pid == -1){
perror("fork error");
}else if(pid == 0){
break; //子进程直接退出
}
//主进程 循环创建
}
if(i < 5){
sleep(i);
printf("i'm %d child, pid = %d\n", i+1,getpid()); //打印自己退出
}else{
sleep(i);
printf("i'm %d parent\n");
}
return 0;
}
刚fork之后
父子相同处: 全局变量,data, .text.栈 堆 环境变量 用户ID 宿主目录 进程工作目录, 信号处理方式
父子不同处: 进程ID fork返回值, 父进程ID 进程运行时间 闹钟 未决信号集
父子进程间遵循 读时共享,写时复制的原则。
父子间进程共享 1.文件描述符(打开文件的结构体(0-3G))
2.mmap建立的映射区
set follow-fork-mode child
set follow-fork-mode parent