Linux进程程序替换

一、单进程下的程序替换

使用execl进行程序替换,先执行execl前面的代码,在execl处替换成其它进程的代码和数据继续执行,后面的内容就不执行了,因此只打印before

二、程序替换原理

前面我们fork创建子进程,子进程会继承父进程的代码和数据,通过pid_t id进行分流。

而使用execl进行程序替换,可以使子进程执行外部其它写好的程序。

执行到execl时,直接将新的代码和数据替换到物理内存上,然后调整页表映射关系;这一过程中PCB不变,还是原来的进程。

注:父子进程继承时,一般只有数据是写时拷贝,代码为只读。

程序替换因为要修改只读的代码区,OS内部就会进行写时拷贝,这是为了保持进程独立性。

三、多进程版

创建一个子进程进行execl程序替换,替换后子进程不变,退出后被父进程wait回收

execl成功没有返回值,失败有返回值,代码和数据不被替换,继续执行,父进程根据退出码可以得到相应execl失败的信息。

四、exec系列函数接口的使用

注意几点规律:

1、execl

第一个为路径(相对或绝对均可,即找到这个可执行程序)   

带l(list)为可变参数列表,参数一个接一个传入。和命令行一样,指令+选项(找到后怎样做)

2、execlp(PATH) 

会在默认的PATH环境变量中查找(可以省略一些路径)

注:环境变量是全局的,一直被继承,替换时不改变环境变量

3、execv(vector)

参数类型为 字符串指针数组

将myargv这个命令行参数的数组,传递给前面路径程序的int  main(....)

传参在函数栈帧角度就是压栈出栈等一系列操作.....

4、execle(env)

可以传入自己的环境变量env

makefile伪目标(一次make,生成多个可执行程序)

小问题:

exec可以执行系统命令,也可以执行自己写的可执行程序。

“  ”内就是可执行程序的名字,找到路径,直接执行。

exec可以跨语言调用

回到execle:

命令行参数和环境变量也是数据,在进程地址空间中存在,只要不w,就是全局的,一直继承下去

execl中,不传环境变量参数,替换过来的函数也能拿到。

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

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

相关文章

一文弄懂Linux信号机制

目录 1.什么是信号? 2.信号实现原理 ​3.信号生命周期 4.信号分类 5.信号常见概念 6.信号阻塞和信号忽略的区别? 1.什么是信号? Linux信号机制是进程间通信的一种方式,用于在不同进程之间传递信息。它通过向目标进程发送一…

SQL Server Management Studio (SSMS)的安装教程

文章目录 SQL Server Management Studio (SSMS)的安装教程从Microsoft官网下载SQL Server Management Studio安装程序。选中安装程序右键并选择“以管理员的身份运行”选项选择安装目录,单击“安装”按钮开始安装过程安装成功界面安装完成后,您可以启动S…

微信小程序 - 页面继承(非完美解决方案)

微信小程序 - 面页继承(非完美解决方案) 废话思路首页 indexindex.jsindex.jsonindex.wxml 父页面 page-basepage-base.jspage-base.wxml 子页面 page-apage-a.jspage-a.wxml 子页面 page-bpage-b.jspage-b.wxml 其它app.jsapp.jsonapp.wxss 参考资料 废…

QT通过url下载http地址下的文件(文件夹)

前言 之前只写过通过http协议通信,没有写过下载http地址中的文件或者文件夹,了解一下在QT下如何下载。 其实很简单,同使用协议通信相同的是,创建QNetworkAccessManager和QNetworkRequest,设置QNetworkRequest的url&a…

地球系统模式(CESM)详解

目前通用地球系统模式(Community Earth System Model,CESM)在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来,一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…

[ poi-表格导出 ] java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

解决报错: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错描述: 表格导出本来使用正常,偶然就报了以上错误…

一个方法,教你快速监测蓄电池!

随着电力需求的不断增长和可再生能源的快速发展,蓄电池技术已经成为能源存储领域的重要组成部分。 蓄电池不仅在家庭和工业应用中发挥着重要作用,还在电网稳定性和可持续能源集成方面具有关键地位。然而,蓄电池的有效监控和管理对于确保其可靠…

2011-2021年“第四期”数字普惠金融与上市公司匹配(根据城市匹配)/上市公司数字普惠金融指数匹配数据

2011-2021年“第四期”数字普惠金融与上市公司匹配(根据城市匹配)/上市公司数字普惠金融指数匹配数据 1、时间:2011-2021年 指标:指标:股票代码、年份、行政区划代码、行业名称、行业代码、所属省份、所属城市、数字…

Android开发知识学习——Kotlin进阶

文章目录 次级构造主构造器init 代码块构造属性data class相等性解构Elvis 操作符when 操作符operatorLambdainfix 函数嵌套函数注解使用处目标函数简化函数参数默认值扩展函数类型内联函数部分禁用用内联具体化的类型参数抽象属性委托属性委托类委托 Kotlin 标准函数课后题 次…

【深度学习】【NLP】如何得到一个分词器,如何训练自定义分词器:从基础到实践

文章目录 什么是分词?分词算法使用Python训练分词器步骤1:选择分词算法步骤2:准备训练语料步骤3:配置分词器参数步骤4:训练分词器步骤5:测试和使用分词器 代码示例:使用SentencePiece训练分词器…

塞尔帕替尼的靶点以及疗效【医游记】

(图片来源于网络) 塞尔帕替尼(Selpercatinib)是一种高选择性和抑制活性的小分子RET(受体酪氨酸激酶)抑制剂。它是全球首个获批的高选择性RET抑制剂,用于治疗RET融合阳性的转移性非小细胞肺癌的…

前端 读取/导入 Excel文档

情况: 需要通过Excel表,将数据导入到数据库,但是后台人员出差了,我又只会PHP,没用过node,所以只能前端导入Excel文件,然后循环调用后台的单条添加接口了。 库: Excel.js&#xff08…

LeetCode 2401.最长优雅子数组 ----双指针+位运算

数据范围1e5 考虑nlog 或者n的解法&#xff0c;考虑双指针 因为这里要求的是一段连续的数组 想起我们的最长不重复连续子序列 然后结合一下位运算就好了 是一道双指针不错的题目 class Solution { public:int longestNiceSubarray(vector<int>& nums) {int n nums…

算法leetcode|86. 分隔链表(rust重拳出击)

文章目录 86. 分隔链表&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 86. 分隔链表&#xff1a; 给你一个链表的头节点 head 和一个特…

mybatis-plus 使用 mybatis-plus-join 增强多表关联查询能力

一、mybatis-plus-join mybatis-plus 原生的能力不支持多表关联&#xff0c;对于这种场景只能通过写SQL进行实现&#xff0c;而mybatis-plus-join 则是建立在 mybatis-plus 基础之上的扩展框架&#xff0c;可以在不影响原有能力之上通过简单的API即可实现多表关联能力而无需编…

OpenCV 画极线

from pylab import * import cv2from backend._gs_ import stereo_cameradef compute_epipole(F):""" 从基础矩阵 F 中计算右极点(可以使用 F.T 获得左极点)"""# 返回 F 的零空间(Fx0)U,S,V np.linalg.svd(F)e V[-1]return e/e[2]def plot_epi…

故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断 模型描述 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障…

RK3588编译MXNet框架

目录 1. 背景 2.编译MXNet准备 3.开发板编译 1. 背景 MXNet&#xff08;也称为Apache MXNet或incubator-mxnet&#xff09;是一个开源的深度学习框架&#xff0c;它最初由华为和亚马逊AWS共同开发&#xff0c;并于2017年成为Apache软件基金会的孵化项目。MXNet旨在提供高效、…

【ArcGIS】CSV表导入Arcgis时字段类型改变

一个小记录&#xff1a; 可以看见我的文件夹里不知道我怎么操作的&#xff0c;多出了一个【ini】结尾的文件。 里面显示&#xff0c;我的文件里对应的几列限定为text 这也是为什么我进行xy表转point操作时无法进行的原因 不管我怎么在 csv操作&#xff0c;修改列的单元格格式都…

oracle,CLOB转XML内存不足,ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE“,

通过kettle采集数据时&#xff0c;表输入的组件&#xff0c;查询报错。 ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE”, line 272 ORA-06512: at line 1 通过 ALTER SESSION SET EVENTS ‘31156 trace name context forever, level 0x400’; 修改会话配置 或直接修改…