4.3、Linux进程(2)

个人主页:Lei宝啊
愿所有美好如期而遇
通过系统调用创建进程--fork函数

结果是什么呢?

为什么会出来三个打印呢?
就是因为父进程调用了fork函数创建出了子进程的task_struct,但是一个进程不止task_struct,还有代码和数据,他们从哪里来,于是,子进程就从fork函数之后共享父进程的代码和数据。

再来看一段代码


感兴趣的话,可以去试试通过fork返回的id值的不同去实现两个循环同时跑,一个父进程的,一个子进程的。
我们有三个问题:
- 为什么fork给父进程的id返回子进程的PID,给子进程的id返回0?
- fork为什么会返回两个值?
- fork创建了子进程,下面的代码都是共享的,但是怎么一个id会有两个值呢?
1:一个父亲可以有多个儿子,但一个儿子是不是只有一个父亲?(只考虑亲生的),也就是说,当你走在外面碰见你父亲的朋友,他就知道你父亲是谁,但是你父亲和别人说我儿子是程序员,有人就会问是哪个儿子?所以给父进程的id返回子进程的PID,要我们知道是创建了哪个子进程,而给子进程返回0,表示创建成功,如果给父进程的id返回小于0的数,那就是创建失败。
2:在fork函数中,我们说父进程会创建子进程的task_struct,此时代码和数据也完成了共享,CPU也就将他们同时跑起来了,那么此时的fork函数的return也是代码吧,是不是也共享,那是不是父进程和子进程各自返回一次?
3:父进程和子进程的代码和数据在子进程创建好后就共享了,但是子进程对数据进行更改,是不是也会影响到父进程呢?
我们平时的经验告诉我们,多个进程同时跑,一个崩了,其他的不会被影响,就像我同时开着浏览器和QQ音乐,其中一个崩了,会不会影响另一个?不会,这是操作系统设计好的,进程之间是独立的,谁也不会影响到谁。
那么子进程对数据修改是不是也不应该影响到父进程啊,所以就有写时拷贝,当父进程或者子进程对数据进行修改时,会开辟一个临时变量拷贝原数据,你对这个临时变量做修改。

那么id值会不会有两个呢?我们想想C语言中,变量名在编译后还存在吗?
不存在了,变量名是给程序员看的,机器不需要,所以编译后变量名就变成了地址,我们的id也是如此,他是虚拟地址映射到物理空间上的,所以编译后,由于父子进程,其实不是一个地址,是两个,也就不存在一个id两个值的问题了。
在Linux中,可以用一个变量名表示不同的地址。
我们试着创建多个进程:

看右边,子进程不断被创建。

而后不断退出,从S+变成Z+,以及<defunct>

相关文章:
4.3、Linux进程(2)
个人主页:Lei宝啊 愿所有美好如期而遇 通过系统调用创建进程--fork函数 结果是什么呢? 为什么会出来三个打印呢? 就是因为父进程调用了fork函数创建出了子进程的task_struct,但是一个进程不止task_struct,还有代码和数据,他们…...
element-ui组件输入框之放大镜(搜索图标)
element-ui组件输入框之放大镜(搜索图标 前言一、解决suffix-icon"el-icon-search"绑定事件问题 前言 在使用element-ui组件时想给输入框组件中的放大镜图标也就是搜索图标绑定事件,可以进行如下操作: 一、解决suffix-icon"el-icon-sear…...
[oeasy]python001_先跑起来_python_三大系统选择_windows_mac_linux
先跑起来 🥊 Python 什么是 Python? Python [ˈpaɪθɑ:n]是 一门 适合初学者 的编程语言 类库 众多 几行代码 就能 出 很好效果 应用场景丰富 在 各个应用领域 都有 行内人制作的 python 工具类库 非常专业、 好用 特别是 人工智能领域 pytho…...
吴恩达《机器学习》9-4-9-6:实现注意:展开参数、梯度检验、随机初始化
一、实现注意:展开参数 在上一个视频中,讨论了使用反向传播算法计算代价函数的导数。在本视频中,将简要介绍一个实现细节,即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。 二、梯度检验 在神经网络中…...
软信天成:如何利用大数据提高客户体验?
当今社会,市场均势正在发生变化,消费者拥有更多的选择和更高的决定权,传统的市场营销技巧注重提高品牌认知度和吸引潜在客户,现在早已过时。经济不确定性弥漫,数字化转型仍是大多数企业的优先选择,新的竞争…...
Vue 路由缓存 防止路由切换数据丢失 路由的生命周期
在切换路由的时候,如果写好了一丢数据在去切换路由在回到写好的数据的路由去将会丢失,这时可以使用路由缓存技术进行保存,这样两个界面来回换数据也不会丢失 在 < router-view >展示的内容都不会被销毁,路由来回切换数据也…...
基于ubuntu20.04安装ros系统搭配使用工业相机
基于ubuntu20.04安装ros系统搭配使用工业相机 1. ROS系统安装部署1.1更新镜像源1.1.1 备份源文件1.1.2 更新阿里源1.1.3 更新软件源 1.2 ros系统安装1.2.1 添加ros软件源1.2.2 添加秘钥1.2.3 更新软件源1.2.4 配置及更换最佳软件源1.2.5 ROS安装1.2.6 初始化rosdep1.2.7 设置环…...
网络运维与网络安全 学习笔记2023.11.20
网络运维与网络安全 学习笔记 第二十一天 今日目标 交换网路径选择、Eth-Trunk原理、动态Eth-Trunk配置 Eth-Trunk案例实践、MUX VLAN原理、MUX VLAN配置 交换网路径选择 STP的作用 在交换网络中提供冗余/备份路径 提供冗余路径的同时,防止环路的产生 影响同网…...
银行业数据分析算法应用汇总
数据分析在银行业的应用及具体案例 一、欺诈检测二、客户细分三、风险建模四、营销优化五、信用评分六、客户流失预测七、推荐引擎八、客户生命周期价值预测 一、欺诈检测 欺诈检测即通过分析交易模式,检测可能的欺诈行为,主要有以下几个方面 1.跨机构开…...
搜索引擎trick:成为搜索高手的秘籍
诸神缄默不语-个人CSDN博文目录 文章目录 1. 搜索指令1.1 "完全匹配搜索"1.2 -1.3 site1.4 filetype1.5 * 模糊搜索1.6 intitle1.7 inurl1.8 related1.9 inanchor 2. 组合搜索技巧3. 搜索引擎的选择4. 使用高级搜索功能4.1 时间限定搜索4.2 语言限定搜索4.3 使用搜索…...
基于springboot实现冬奥会科普平台系统【项目源码+论文说明】计算机毕业设计
基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生&…...
用C++标准库生成制定范围内的整数随机数
2023年11月22日,周三上午 #include <iostream> #include <random>int main() {std::random_device rd; // 随机设备,用于获取种子值std::mt19937 gen(rd()); // 使用 Mersenne Twister 引擎作为随机数生成器std::uniform_int_distribution&…...
使用ExLlamaV2量化并运行EXL2模型
量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中,GPTQ在gpu上提供了惊人的性能。与非量化模型相比,该方法使用的VRAM几乎减少了3倍,同时提供了相似的精度水平和更快的生成速度。 ExLlamaV2是一个旨在从…...
【ARM AMBA AXI 入门 15 -- AXI-Lite 详细介绍】
请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI LiteAXI-Full 介绍AXI Stream 介绍AXI Lite 介绍AXI Full 与 AIX Lite 差异总结AXI Lite AMBA AXI4 规范中包含三种不同的协议接口,分别是: AXI4-FullAXI4-LiteAXI4-Stream 上图中的 AXI FULL 和 AIX-Lite 我们都把…...
【开源】基于Vue.js的天然气工程业务管理系统的设计和实现
项目编号: S 021 ,文末获取源码。 \color{red}{项目编号:S021,文末获取源码。} 项目编号:S021,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…...
SpringBoot : ch04 整合数据源
前言 Spring Boot 是当今最流行的 Java 开发框架之一,它以简洁、高效的特点帮助开发者快速构建稳健的应用程序。在实际项目中,涉及到数据库操作的需求时,我们需要对数据源进行整合。本文将重点介绍如何在 Spring Boot 中整合数据源ÿ…...
Docker Swarm总结
目录 1、swarm 理论基础 1.1 简介 1.2 节点架构 1.3 服务架构 1.4 服务部署模式 2、swarm 集群搭建 2.1 需求 2.2 克隆主机 2.3 启动5个docker宿主机 2.4 查看 swarm 激活状态 2.5 关闭防火墙 2.6 swarm 初始化 2.7 添加 worker 节点 2.8 添加 manager 节点 3…...
特殊token的特殊用途
特殊token的特殊用途 特殊voc设计传统的特殊token 用途特殊用途例子特殊voc设计 普通token1 。。。。普通token1000,特殊token1,,,,,特殊token100 ,特殊指示token1,,,特殊指示token100 传统的特殊token 用途 在您提供的示例中,有1000个普通 token(从普通 token …...
苹果Siri怎么打开?教你两招轻松唤醒!
苹果Siri助手是苹果公司开发的智能语音助手。作为智能语音助手,Siri可以理解用户的指令,并给出相应的回答或执行相应的操作,帮助大家完成各种任务,比如发送短信、查询天气、播放音乐、设置提醒等等。 然而,还有一些小…...
分类问题的评价指标
一、logistic regression logistic regression也叫做对数几率回归。虽然名字是回归,但是不同于linear regression,logistic regression是一种分类学习方法。 同时在深度神经网络中,有一种线性层的输出也叫做logistic,他是被输入…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
