进程 --- fork()创建子进程

一、子进程的创建过程

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 }

运行结果

​​​​​​​

        打印的顺序不一定是先打印父进程,然后打印子进程,顺序是随机的,子进程被创建以后,会立马加入到运行队列中,谁先运行完,就先打印 。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值