【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)

本文介绍了Linux中的PID和PPID概念,重点剖析了Fork函数的工作原理,包括其返回值、父子进程的关系、代码段和数据段的共享机制以及如何实现代码执行的复制。
摘要由CSDN通过智能技术生成

前言

大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

一.前置知识——pid和ppid

1.系统调用接口查看pid,ppid

  • pid:当前进程
  • ppid:父进程
  • 每一次启动的进程, 系统会重新生成pid ,系统只保证当前生命周期内pid有效;
  • 但是 父进程不会变 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.为什么ppid父进程id不变?——bash命令行解释器与bash进程

  • 当我们运行一个进程时,命令行解释器会把这个指令解释成bash的子进程
  • 接着再由这个bash的子进程执行对应的命令
  • 当这个子进程出现问题时,并不影响bash的进程
  • 即:每一条命令被执行,都属于bash的子进程
  • 我们执行一段代码,parent对应的是getppid()函数;
    在这里插入图片描述
    我们接着用ps+grep过滤指令查看这个16815进程,发现其就是bash进程
    在这里插入图片描述

二.fork( )函数原理与应用详解

1.fork()函数基本介绍

  • fork(): 创建子进程
    在这里插入图片描述
  • 返回值给 【父进程返回子进程PID,给子进程返回0】
    在这里插入图片描述

2.fork()返回值有两个:——>变成了两个进程(父子进程)——>实现两个死循环同时跑

  • 我们观察发现,他们不但生成了两个进程,而且还是父子进程关系
    在这里插入图片描述
  • 由此我们得到了进程之间的 关系图
    在这里插入图片描述

3.为什么fork要有两个返回值?

  • 返回不同的返回值,是为了 区分
  • 为了让fork以后的if判断while等,来让父子进程执行 不同 的代码片段

4.为什么fork要给子进程返回0,给父进程返回子进程pid?

  • 父进程要标记子进程,确保其 唯一性

5.fork函数究竟在干什么?————>父子进程共享代码段,各自拥有数据段(写时拷贝)

  • 进程=内核数据结构+代码和数据
  • 多了一个子进程,说明内存中一定会多出一个PCB供操作系统调度
  • fork出来的子进程,和父进程 共享同一个代码
  • 任何平台,进程在运行的时候,是具有 独立性
  • 因为数据 可能被修改 (一开始除外), 所以需要访问子进程的数据时 ,不能让他们共享数据;
  • 代码 不可以被修改 ,所以可以共享
  • 子进程需要访问数据时,单独开空间用多少,拷贝多少,进行了写时拷贝
    在这里插入图片描述
    在这里插入图片描述

父子进程共享代码段现象:fork以后的代码执行了两次

  • 先不调用fork函数,观察这段代码执行结果
  • 代码正常执行一次在这里插入图片描述
    在这里插入图片描述
  • 调用fork()以后:
  • 我们发现fork以后的代码 执行了两次 在这里插入图片描述
    在这里插入图片描述

6.一个函数是如何做到返回两次的?——>父子进程共享return代码段

  • fork是一个函数, return语句 也属于 代码片段
  • 从5小点我们知道 父子进程共享代码段 ,于是有了以下过程
    在这里插入图片描述

7.一个变量怎么会有不同的内容?——>地址空间

  • 地址空间章节传送门
  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY的秘密代码小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值