冯诺依曼体系结构
操作系统(Operator System)
进程控制块(PCB)
struct task_struct{//该进程的所有属性//该进程对应的代码和属性地址struct task_struct* next;
};
struct task_struct 内核结构体——>创建内核结构体对象(task_struct)--->将对象和数据关联起来。
进程=内核数据结构(task_struct)+ 进程对应的磁盘代码
while(true){cout<<"son:pid: "<<getpid()<<" parent: "<<getppid()<<endl;sleep(1);}
son:pid: 6221 parent: 5912
son:pid: 6221 parent: 5912
son:pid: 6221 parent: 5912
son:pid: 6166parent: 5912
son:pid: 6166parent: 5912
多次运行父进程ppid不变。
命令行上启动的进程,一般父进程没有特殊情况的话,都是bash!!!
./"proc"
A proc, pid : 4018,ppid : 3997,id : 4019
A proc, pid : 4019,ppid : 4018,id : 0
fork
通过fork可以子进程。
pid_t id=fork();printf("A proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);sleep(2);
pid_t id=fork();//printf("A proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);if(id==0){while(1){printf("Son proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);sleep(1);}}else if(id>0){while(1){printf("Par proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);sleep(1);}}else{}
Par proc, pid : 6856,ppid : 5912,id : 6857
Son proc, pid : 6857,ppid : 6856,id : 0
Par proc, pid : 6856,ppid : 5912,id : 6857
Son proc, pid : 6857,ppid : 6856,id : 0
Par proc, pid : 6856,ppid : 5912,id : 6857
Son proc, pid : 6857,ppid : 6856,id : 0
总结
fork()之后,会有父进程和子进程两个进程执行后续代码
fork后续的代码,被父子进程共享
通过返回值不同,让父子进程执行后续共享代码的一部分。