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

  • 地址空间章节传送门
相关文章
|
11天前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
30 5
|
20天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
26天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
1月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
250 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
56 3
|
2月前
|
Linux Shell Python
9-7|salt代码在linux机子那个目录
9-7|salt代码在linux机子那个目录
|
8天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
73 6
|
9天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
37 3
|
9天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
30 2