一、子进程的创建过程
1.创建子进程
进程 = 进程控制块(task_struct) + 进程的代码和数据
# 进程控制块(task_struct):子进程的task_struct会以父进程的为“模板”,来初始化子进程的task_struct。
# 进程的代码和数据:默认情况下继承 “父进程” 的代码和数据(实际上是共享)假设父进程里有个数据 a = 100,那么父、子进程会指向同一块空间。 //代码是不可修改的
# 默认情况下数据也是共享的,不过需要考虑修改的情况。 //数据写时拷贝
调度器觉得父子进程的运行顺序
2.运行子进程
1 #include <iostream>
2 #include <unistd.h>
3 using namespace std;
4
5 int main(){
6 int ret = fork();
7 if(ret == 0){
8 while(1){
9 cout << "Hello proc: pid -> " << getpid() << " / ppid -> " << getppid() <<endl;
10 sleep(1);
11 cout << "==================================================" << endl;
12 }
13 }
14 else if(ret > 0){
15 while(1){
16 cout << "Hello proc: pid -> " << getpid() << " / ppid -> " << getppid() <<endl;
17 sleep(2);
18 }
19 }
20
21 return 0;
22
23 }
运行结果
打印的顺序不一定是先打印父进程,然后打印子进程,顺序是随机的,子进程被创建以后,会立马加入到运行队列中,谁先运行完,就先打印 。