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

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

前言

大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁

主要内容含:

一.前置知识——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.一个变量怎么会有不同的内容?——>地址空间

  • 地址空间章节传送门
相关文章
|
8天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
22 3
|
13天前
|
安全 Linux
Linux通配符及其在文件搜索和管理中的应用
Linux通配符及其在文件搜索和管理中的应用
|
3天前
|
监控 安全 Linux
Linux命令ssltap的深入解析与应用实践
`ssltap`是一个假想的Linux命令,用于模拟SSL/TLS流量分析。它捕获、解密(如果有密钥)并分析加密流量,提供实时监控、协议解析和安全审计。特点包括实时性、灵活性、可扩展性和安全性。示例用法包括捕获特定端口流量和实时监控会话状态。在实际操作中应注意私钥安全、性能影响及合规性,建议定期审计和自动化监控。
|
9天前
|
存储 数据管理 Linux
Linux命令sg的深入解析与应用
**Linux的`sg`命令用于高效管理SCSI设备,它基于DMA和Scatter-Gather技术,提供直接设备控制和高效数据传输。`sg`常通过`sg3_utils`工具集来使用,例如`sg_io`,用于执行SCSI命令。在实际应用中,需注意权限、数据安全和兼容性问题,遵循备份、详细阅读文档和逐步测试的最佳实践。**
|
12天前
|
小程序 Linux
【编程小实验】利用Linux fork()与文件I/O:父进程与子进程协同实现高效cp命令(前半文件与后半文件并行复制)
这个小程序是在文件IO的基础上去结合父子进程的一个使用,利用父子进程相互独立的特点实现对数据不同的操作
|
12天前
|
缓存 网络协议 算法
【Linux系统编程】深入剖析:四大IO模型机制与应用(阻塞、非阻塞、多路复用、信号驱动IO 全解读)
在Linux环境下,主要存在四种IO模型,它们分别是阻塞IO(Blocking IO)、非阻塞IO(Non-blocking IO)、IO多路复用(I/O Multiplexing)和异步IO(Asynchronous IO)。下面我将逐一介绍这些模型的定义:
|
4天前
|
Unix Linux Python
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
8 0
|
12天前
|
Linux 数据处理
Linux命令setarch深度解析与实际应用
`setarch`是Linux下用于调整程序执行环境的命令,它允许在不同CPU架构间运行二进制文件,模拟架构并设置CPU功能标志。通过指定`-a`参数切换架构,如`-a i386`,用`-R`参数启用或禁用如SSE2的功能。在测试兼容性、调试和优化时非常有用。注意正确设置参数,避免滥用,确保程序正常运行。查阅文档、逐步测试和考虑兼容性是最佳实践。
|
12天前
|
Linux Shell 数据处理
Linux命令seq的深入解析与应用
`seq`命令在Linux中用于生成数字序列,适用于数据处理和脚本编写。它支持自定义起始值、步长和结束值,可生成整数或浮点数。通过选项如`-f`(格式化输出)、`-s`(设置分隔符)、`-w`(宽度对齐)和`-r`(逆序)调整输出。在实践中,`seq`常与for循环结合,用于测试数据、文件命名等。注意增量为零会导致无限循环,格式和宽度选项不能同时使用。善用`seq`能提升命令行效率。