0

0

【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

看不見的法師

看不見的法師

发布时间:2025-06-21 16:16:10

|

543人浏览过

|

来源于php中文网

原创

推荐书籍:

《深入理解计算机系统》《程序员的自我修养》

1.理解子进程去调用替换函数,达到我们想要的目的。shell命令行也是这样进行处理,我们每次操作的命令,都是fork()创建子进程,然后让子进程调用exe函数进行程序替换,去执行我们想要的程序。比如ls……这些都是一些执行对应程序。

2.进程替换没有创建新进程,所以调用替换函数的进程的pid不会发生变化。

3.程序替换函数只要成功,就会会发生代码替换,就不会有返回值。如果有返回值,就表示程序替换失败。

替换原理:

当一个程序调用exe类型的函数时,这个进程的用户空间代码和数据完全被新进程替换。

从新程序的启动历程开始执行。(C/C++从mian函数开始执行)

exe程序替换函数一般是子进程进行调用。

调用exe类型的函数不会创建新进程,调用exe函数的进程pid不会改变。

【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

替换函数:

程序替换函数以exe开头,所以统称为exe函数。

命名理解:

●l(list):表示参数采用链表。

●v(vector):采用数组。

●p(PATH):有p表示自动搜索环境变量PATH。

●e(env):表示自己维护环境变量。

命令:

在/usr/bin中放置的就是命令的可执行文件。

【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

6个exe函数 1.execl函数函数原型:函数解释:

1.三个点表示可变参数列表,可以传多个参数。

2.path表示要替换程序的路径。(在哪里)

星辰Agent
星辰Agent

科大讯飞推出的智能体Agent开发平台,助力开发者快速搭建生产级智能体

下载

3.后面的arg表示什么样的命令执行。(怎么执行)


实例:

--color表示带颜色显式,这里有两个-。

也可以执行自己的路径,执行自己的可执行程序。

【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

代码语言:javascript代码运行次数:0运行复制
#include #include  int main(){    int a=execl("/usr/bin/ls","ls","-l","-a","--color",nullptr);                                                                                                        //如果打印了a的值就表示替换失败    std::cout<2.execv函数函数原型:函数解释:

1.把这个和1号函数进行比较,唯一的区别就是后面不一样:

execv传递的是一个char* const的数组,而execl传递的是一个个const char*。

v像vector,表示数组。l像list表示的链表,链表就是分别传参。

2.这两个函数没有本质区别,底层都是调用execve。他们就只有传参的不一样,execl调用execve后,传递的每个const char*会变成一个char*数组。

3.后面的几个函数都只有参数不同,底层都调用execve。设计这么多函数是为了满足不同场景的需求,有时候就是要一个一个传参,有时候就有char*数组。

示例:
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

3.execlp和execvp函数原型:

这两个函数都是带p的,就不要写路径。

代码语言:javascript代码运行次数:0运行复制
 #include  #include   int main() {     //int a=execl("/usr/bin/ls","ls","-l","-a","--color",nullptr);      //int a=execl("./myprocess","./myprocess",nullptr);      pid_t id=fork();      if(id==0)     {         char* const argv[]={             (char*)"ls",             (char*)"-l",             (char*)"-a",             (char*)"--color",             nullptr                                                                                                                                                                                                         };          //int a=execv("/bin/ls",argvs);          // int a=execlp("ls","ls","-l","-a","--color",nullptr);          int a=execvp("ls",argv);          //如果打印了a的值就表示替换失败         std::cout<0)     {         std::cout<<"等待进程成功!"<4.execle和execve函数:

有e的是要进行自己进行组装环境变量的。

execvpe函数:函数原型:函数解释:

1.env是我们传递的全新的环境变量。对于env我们可以传递父进程的环境变量,也可以在父进程的环境变量上新增。

2.刚刚开始的bash进程就要传递自己写的环境变量。自己写的环境变量,自己定义,自己传递。

3.如何新增环境变量:

总结:

实际上,只有execve才是真正的系统调用,其他的函数都是调用execve。所以execve在man的手册2,其他函数在手册3。

【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

557

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

394

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

755

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

478

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

454

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1051

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

658

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

6

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 12.4万人学习

Node.js 教程
Node.js 教程

共57课时 | 9.1万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号