Linux中的进程程序替换
Linux中的进程程序替换
- 1. 替换原理
- 2. 替换函数
- 3. 函数解释
- 4. 命名理解
- 程序替换的意义
1. 替换原理
替换原理
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。

我们在替换新程序时,只是把我们目标程序的数据和代码替换到原来的进程的物理内存中(实际上是覆盖掉原来的代码和数据)
2. 替换函数
其实有六种以exec开头的函数,统称exec函数:
#include <unistd.h>`
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ...,char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
/
int execve(const char *path, char *const argv[], char *const envp[]);
3. 函数解释
这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。
如果调用出错则返回-1
所以exec函数只有出错的返回值而没有成功的返回值。
4. 命名理解
这些函数原型看起来很容易混,但只要掌握了规律就很好记。
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量

exec调用举例如下:
#include <unistd.h>
int main()
{char *const argv[] = {"ps", "-ef", NULL};char *const envp[] = {"PATH=/bin:/usr/bin", "TERM=console", NULL};execl("/bin/ps", "ps", "-ef", NULL);// 带p的,可以使用环境变量PATH,无需写全路径execlp("ps", "ps", "-ef", NULL);// 带e的,需要自己组装环境变量execle("ps", "ps", "-ef", NULL, envp);execv("/bin/ps", argv);// 带p的,可以使用环境变量PATH,无需写全路径execvp("ps", argv);// 带e的,需要自己组装环境变量execve("/bin/ps", argv, envp);exit(0);
}
事实上,只有execve是真正的系统调用,其它五个函数最终都调用 execve,所以execve在man手册 第2节,其它函数在man手册第3节。这些函数之间的关系如下图所示。
下图exec函数族 一个完整的例子

程序替换的意义
总的来说:无论哪种方式,程序替换都会立即停止当前正在运行的程序,并用新程序替换它。
程序替换在Linux系统中有一些重要的意义和用途:
软件更新:程序替换是更新软件的常见方法之一。通过将旧版本的程序替换为新版本,可以获得修复的漏洞、改进的功能和性能优化等好处。程序替换使得在不中断服务的情况下升级软件成为可能。
系统维护:在系统维护过程中,程序替换可以用于修复损坏的或出现故障的程序。通过替换受损的程序,可以恢复系统的正常运行。
安全性:程序替换可以用于提高系统的安全性。当已知的程序存在安全漏洞时,可以通过替换为更安全的替代程序来减少潜在的风险。此外,通过替换系统默认的程序和工具,可以根据特定的安全需求进行定制。
自定义和个性化:通过程序替换,用户可以根据自己的需求和喜好选择和使用不同的程序。这使得用户可以自定义系统的外观、功能和行为,从而满足个人化的需求。
总而言之,程序替换在Linux系统中具有重要的意义,它可以用于软件更新、系统维护、安全性提升以及自定义和个性化等方面。它是维护和发展Linux系统的重要工具之一。
(本章完)
相关文章:
Linux中的进程程序替换
Linux中的进程程序替换 1. 替换原理2. 替换函数3. 函数解释4. 命名理解程序替换的意义 1. 替换原理 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的…...
MIT6.824-Raft笔记:脑裂、Majority Vote(过半投票/过半选举)
本部分主要是问题引入,以及给出一个解决方案 1 脑裂(Split Brain) replication system的共同点:单点 前面几个容错特性(fault-tolerant)的系统,有一个共同的特点。 MapReduce复制了计算&…...
vuex中的常用属性有哪些?
在 Vuex 中,有一些常用的属性可以帮助你管理应用程序的状态。这些属性包括 state、getters、mutations 和 actions。 state: 用于存储应用程序的状态数据,是 Vuex 存储数据的地方。当应用程序中的多个组件需要共享状态时,就可以将这些共享的状…...
oracle面试相关的,Oracle基本操作的SQL命令
文章目录 数据库-Oracle〇、Oracle用户管理一、Oracle数据库操作二、Oracle表操作1、创建表2、删除表3、重命名表4、增加字段5、修改字段6、重名字段7、删除字段8、添加主键9、删除主键10、创建索引11、删除索引12、创建视图13、删除视图 三、Oracle操作数据1、数据查询2、插入…...
Ubuntu 23.10 服务器版本 ifconfig 查不到网卡 ip(已解决)
文章目录 1、问题描述2、 解决方案 1、问题描述 服务器:ubuntu 23.10 经常会遇到虚拟机添加仅主机网卡后,通过 ifconfig 无法获取其网卡 ip 2、 解决方案 修改网卡配置文件: # 进入网卡配置文件目录 cd /etc/netplan # 备份原始文件 cp …...
如何实现图片轮播(python版)
为了实现图片自动轮播,我们可以使用Python编写一个简单的脚本。首先,我们需要安装一个名为Pillow的库来处理图片。在命令行中输入以下命令进行安装: pip install Pillow 接下来,我们编写一个名为image_slideshow.py的脚本&#x…...
【每日一题】1410. HTML实体解析器-2023.11.23
题目: 1410. HTML 实体解析器 「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括: 双引号:字符实体为 &…...
Python爬虫-获取汽车之家新车优惠价
前言 本文是该专栏的第10篇,后面会持续分享python爬虫案例干货,记得关注。 本文以汽车之家新车优惠价为例,获取各车型的优惠价,示例图如下: 地址:aHR0cHM6Ly9idXkuYXV0b2hvbWUuY29tLmNuLzAvMC8wLzQyMDAwMC80MjAxMDAvMC0wLTAtMS5odG1sI3B2YXJlYWlkPTIxMTMxOTU= 需求:获…...
搜索引擎---项目测试
11111...
揭秘 Go 中的模板:一份全面而广泛的指南
关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 本全面指南将带领您进入Go模板的复杂世界,为您提供使用这个宝贵工具的知识和专业技能。在探索过程中,您将…...
使用Python的turtle模块绘制钢铁侠图案
1.1引言: 在Python中,turtle模块是一个非常有趣且强大的工具,它允许我们以一个可视化和互动的方式学习编程。在本博客中,我们将使用turtle模块来绘制钢铁侠的图案。通过调用各种命令,我们可以引导turtle绘制出指定的图…...
ORACLE手动建库
1.确定oracle的实例名,以及数据库名 实例名称: ORACLE_SIDtest 数据库名称: test 2.手工创建如下目录: /oracle/admin/test/adump --对应的是spfile里参数audit_file_dest …...
绝地求生:PGC 2023 赛事直播期间最高可获:2000万G-Coins,你还不来吗?
今年PGC直播期间将有最高2000万G-Coin掉落,究竟花落谁家咱们拭目以待 公告原文:Watch PGC 2023 Live And Earn G-Coins! 如何赚取高额G-Coin? Throughout the PGC 2023, an astounding 20,000,000 G-Coins will be up for grabs as part of …...
vue每个阶段的生命周期做了什么
Vue 实例的生命周期可以分为创建阶段、挂载阶段、更新阶段和销毁阶段。下面是每个阶段具体干了什么的说明和对应的代码示例: 创建阶段 beforeCreate: 此阶段在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用…...
酷开科技OS——Coolita,让智能大屏走向国际
10月23日,2023中国—东盟视听传播论坛在南宁举行。作为第五届中国—东盟视听周重要活动之一,本次论坛以“共享新成果、共创新视听、共建新家园”为主题。来自中国和东盟的300余名专家学者、业界代表通过主旨演讲、主题发言、圆桌对话等方式进行深入探讨&…...
C/C++小写字母的判断 2022年3月电子学会中小学生软件编程(C/C++)等级考试一级真题答案解析
目录 C/C小写字母的判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C小写字母的判断 2022年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个字符,判断是否是英文小…...
ky10 server x86 安装、更新openssl3.1.4(在线编译安装、离线安装)
查看openssl版本 openssl version 离线编译安装升级 #!/bin/shOPENSSLVER3.1.4OPENSSL_Vopenssl versionecho "当前OpenSSL 版本 ${OPENSSL_V}" #------------------------------------------------ #wget https://www.openssl.org/source/openssl-3.1.4.tar.gzech…...
Python 使用XlsxWriter操作Excel
在数据处理和报告生成的领域中,Excel 文件一直是广泛使用的标准格式。为了让 Python 开发者能够轻松创建和修改 Excel 文件,XlsxWriter 库应运而生。XlsxWriter 是一个功能强大的 Python 模块,专门用于生成 Microsoft Excel 2007及以上版本&a…...
PostgreSQL中所的锁
为了确保复杂的事务可以安全地同时运行,PostgreSQL提供了各种级别的锁来控制对各种数据对象的并发访问,使得对数据库关键部分的更改序列化。事务并发运行,直到它们尝试获取互相冲突的锁为止(比如两个事务更新同一行时)。当多个事务同时在数据…...
学习MySQL先有全局观,细说其发展历程及特点
学习MySQL先有全局观,细说其发展历程及特点 一、枝繁叶茂的MySQL家族1. 发展历程2. 分支版本 二、特点分析1. 常用数据库2. 选型角度及场景 三、三大组成部分四、总结 相信很多同学在接触编程之初,就接触过数据库,而对于其中关系型数据库中的…...
别再傻傻分不清了!一文搞懂EI会议、SCI期刊论文的检索证明到底怎么开(附哈工大图书馆实战)
EI会议与SCI期刊论文检索证明全流程指南:从原理到实战 站在图书馆查收查引服务台前的你,手里攥着好不容易发表的论文录用通知,却对接下来要办理的"检索证明"一头雾水——这可能是大多数研究生第一次面对学术成果认证时的真实写照。…...
GitHub 热榜项目 - 日榜(2026-04-27)
GitHub 热榜项目 - 日榜(2026-04-27) 生成于:2026-04-27 统计摘要 共发现热门项目: 13 个 榜单类型:日榜 Token赞助:siliconflow 本期热点趋势总结 本期 GitHub 热榜呈现出 AI Agent 深度介入开发者工作流的显著趋势。核心技…...
endnote引用的参考文献都没有期刊的信息的问题处理
这确实是论文排版中的一个“大坑”,尤其是对于博士论文来说,格式的严谨性至关重要。以下是修复这个问题的三个排查步骤,按可能性从大到小排列:1. 检查 EndNote 数据库中的条目信息(最常见原因)请在 EndNote…...
SkeyeVSS开发常见问题FAQ:国标设备心跳与频繁掉线
试用安装包下载 | SMS | 在线演示 项目地址:https://github.com/openskeye/go-vss 1. 问题现象 设备在界面上一会儿在线、一会儿离线;或夜间批量掉线后自行恢复;录像、报警订阅间歇失效。 2. 心跳在国标场景中的含义 不同厂商实现差异较大…...
如何用LibreHardwareMonitor全面掌控电脑硬件健康状态?开源硬件监控神器深度解析
如何用LibreHardwareMonitor全面掌控电脑硬件健康状态?开源硬件监控神器深度解析 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of you…...
【Java微服务治理终极指南】:Service Mesh落地中90%团队踩坑的5大陷阱及避坑清单
更多请点击: https://intelliparadigm.com 第一章:Java微服务服务网格治理全景图 在云原生架构演进中,Java微服务正从传统SDK治理模式逐步转向以Sidecar为核心的透明化服务网格(Service Mesh)治理范式。Istio、Linke…...
一站式游戏模组管理器:XXMI Launcher终极完整指南
一站式游戏模组管理器:XXMI Launcher终极完整指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为不同游戏安装多个模组管理器而烦恼吗?想在一个界…...
不只是二维码:用Python脚本自动化处理CTF中烦人的循环Base64解密(附完整代码)
突破CTF解题瓶颈:Python自动化处理多层Base64编码实战 在CTF竞赛中,遇到需要反复解码的Base64字符串就像面对一个俄罗斯套娃——每次你以为快要接近核心,却发现还有另一层等待解开。传统的手动复制粘贴到在线工具不仅效率低下,还容…...
ZYNQ SPI接口选型指南:MIO、EMIO还是AXI Quad SPI?看完这篇不再纠结
ZYNQ SPI接口选型指南:MIO、EMIO还是AXI Quad SPI?看完这篇不再纠结 在ZYNQ系列SoC的开发过程中,SPI接口的选择往往让工程师陷入纠结。面对PS端的MIO、EMIO和PL端的AXI Quad SPI三种实现方案,如何根据项目需求做出最优决策&#x…...
STM32F407串口调试避坑指南:从CubeMX配置到HAL库中断收发,这些细节错了真调不通
STM32F407串口调试避坑指南:从CubeMX配置到HAL库中断收发实战解析 调试STM32串口通信就像在迷宫中寻找出口——看似简单的路径背后隐藏着无数可能让你停滞不前的陷阱。本文将带你穿越这片技术丛林,用工程师的视角剖析那些手册上不会明确标注,…...
