Linux5.3、进程替换

个人主页:Lei宝啊 

愿所有美好如期而遇


目录

替换原理

替换函数

函数解释


替换原理

当一个进程调用进程替换函数时,该进程的数据和代码完全被新程序的代码和数据所代替,而后重新构建页表的映射关系,进程还是之前的进程,并未创建新的进程。

我们可以用fork创建出子进程,让子进程通过程序替换去执行另一个程序。

替换函数

我们一个一个进行使用与验证,同时,我们的指令也是程序,运行起来也是进程,所以我们程序替换就以替换指令为例子。

使用execlp,我们就不需要关心路径的问题,因为系统会自动去我们的环境变量PATH下的路径去寻找。

或者我们这样写也可以

 execvp也是同样的道理,我们不用再加路径,不做演示。

最后我们演示一种带e的函数,在演示之前,我们仍然有几个问题就是,既然ls这种系统的程序我们可以执行,那么我们自己的程序可不可以替换执行呢?我们又怎么知道带e的函数有没有传递环境变量表呢?不带e的函数他又能不能传递环境变量表呢?

我们可以看到我们没有传递环境变量表,但是mytest依然得到了环境变量表,这是为什么?我们可以想到进程有进程地址空间,进程地址空间里有环境变量的虚拟地址,父进程创建子进程时,子进程会继承父进程的进程地址空间和页表,而且在程序替换时,仅仅只是局部的替换,替换程序的代码和数据,不会替换环境变量表。

我们也就解答了上面几个问题,我们当然可以替换执行我们自己的程序,同时带或者不带e的函数都是可以传递环境变量表的,而且通常我们使用带e的函数都是因为我们想要一张全新的环境变量表,否则我们不管使用哪一个函数,默认都会继承父进程的环境变量表,其实,这些函数的功能都是相同的,都是进程替换,只是传递的参数不同罢了。

我们上面了解到了子进程会默认继承父进程的环境变量表,也可以是我们自己写的全新的环境变量表,我们还有一种就是在本进程下新增环境变量,使用putenv函数(c99不支持,记得改makefile)。

但是,这并不会影响我们的bash,他只影响本进程及其子进程。

那么我们可以看见的是7个函数,既然功能相同,为什么在慢查询execve函数时不和其他六个函数在一起呢?

进程替换,替换进程的代码和数据,这是由操作系统所管理的,所以他会为用户提供一个进程替换的系统调用,而我们上述的6个函数,全部都封装了这个系统调用。

函数解释

1、从开始我们就会发现,进程替换成功后,exec系列的函数后面的代码都不会再执行,因为该进程的代码和数据已经被替换了,所以如果执行了后面的代码,就是替换失败,我们直接exit。

2、替换成功后,进程还是之前的进程,不会新创建,我们来验证。

3、创建一个进程,先创建他的PCB,进程地址空间和页表,然后才将他的代码和数据加载进内存,而进程替换的本质工作,就是做进程数据和代码的加载,新建的一个进程,加载代码和数据时本质也就是进程替换,将代码和数据覆盖式的加载到内存上。

4、无论是什么语言,只要能在linux下跑起来,那么我们就可以进行程序替换,也就是说,C语言写的代码可以调用Python、java等等语言的可执行程序,因为在进程替换时,本质就是替换二进制的代码和数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/284361.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是SPEC基准测试?

SPEC服务器应用性能测试是一个全面衡量Web应用中java企业应用服务器性能的基础测试。 SPEC(the Standard Performance Evaluation Corporation标准性能评估机构)是一个全球性的、权威的第三方应用性能测试组织,它旨在确立、修改以及认定一系列服务器应用性能评估的…

SpringBoot配置mysql加密之Druid方式

一、导入Druid依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version> </dependency>二、生成密文 方式1. 找到存放druid jar包的目录 1-1、在目录…

【企业转型】以企业架构为中心的SABOE数字化转型五环法

01 传统企业数字化转型面临诸多挑战 即将过去的2023年&#xff0c;chatGPT大模型、数据资产入表等事件的发生&#xff0c;标志着数字经济正在加速发展。数字经济是人类社会继农业经济、工业经济之后的第三种经济形态&#xff0c;将推动生产方式、生活方式和治理方式深刻变革&a…

Java研学-JavaScript 进阶

一 JS 的 DOM 1 概述 DOM 是 Document Object Model 文档对象模型的缩写。根据 W3C 的 DOM 规范&#xff0c;它是一种与浏览器&#xff0c;平台&#xff0c;语言无关的接口&#xff0c;能够动态地修改 XML 和 HTML。   D&#xff1a;文档 – HTML文档 或 XML 文档   O&…

CSS学习笔记整理

CSS 即 层叠样式表/CSS样式表/级联样式表&#xff0c;也是标记语言&#xff0c; 用于设置HTML页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式、边距&#xff09;以及版面的布局和外观显示样式 目录 准备工作 Chrome调…

基于FPGA的温度控制系统设计(论文+源码)

1.系统设计 本次基于FPGA的智能温度控制系统&#xff0c;以FPGA为控制核心&#xff0c;采用自顶向下的设计方法&#xff0c;按照模块化设计的思路分别实现各个模块&#xff0c;再加以整合实现整个系统&#xff0c;从而达到了温度控制的目的。系统以水箱为被控对象&#xff0c;…

环境搭建及源码运行_java环境搭建_redis安装

书到用时方恨少、觉知此时要躬行&#xff1b;拥有技术&#xff0c;成就未来&#xff0c;抖音视频教学地址&#xff1a;​​​​​​​ ​​​​​​​​​​​​​​ 1、redis 介绍 后面会有精讲redis部分&#xff0c;此部分内容着重在redis环境的搭建 Redis&#xff08;Remot…

如何让.NET应用使用更大的内存

我一直在思考为何Redis这种应用就能独占那么大的内存空间而我开发的应用为何只有4GB大小左右&#xff0c;在此基础上也问了一些大佬&#xff0c;最终还是验证下自己的猜测。 操作系统限制 主要为32位操作系统和64位操作系统。 每个进程自身还分为了用户进程空间和内核进程空…

怎么选择合适的3ds Max云渲染农场?

3ds Max 用户日常面临的一个共同挑战便是漫长的渲染周期。作为一个强大的三维建模和渲染软件&#xff0c;3ds Max 势必需处理大量的光照、材质和阴影计算任务&#xff0c;因此&#xff0c;良好的渲染方案对从业者而言尤为重口。 一、为何考虑3ds Max云渲染? 云渲染成为了解决…

重新认识Word——尾注

重新认识Word——尾注 参考文献格式文献自动生成器插入尾注将数字带上方括号将参考文献中的标号改为非上标 多处引用一篇文献多篇文献被一处引用插入尾注有横线怎么删除&#xff1f;删除尾注 前面我们学习了如何给图片&#xff0c;公式自动添加编号&#xff0c;今天我们来看看毕…

地球坐标系介绍--地心大地、地心地固直角、协议地球 坐标系

在研究地面点间几何关系的问题中&#xff0c;一般使用地球坐标系。地球坐标系固定在地球上&#xff0c;它跟随地球自转而不断地运动&#xff0c;相对地球却不存在运动&#xff0c;因此&#xff0c;地球坐标系也称地固坐标系。所有和地球保持固定关系的点&#xff0c;如地面点&a…

配电室综合监测系统

配电室综合监测系统是一种集成了自动化、智能化等技术手段的电力监控系统。它通过对配电室内的电力设备进行实时监控、数据分析和处理&#xff0c;能够提高电力设备的安全性和效率&#xff0c;及时发现并解决电力故障和潜在问题&#xff0c;保证电力系统的稳定运行。 该系统通常…