进程程序替换-exec系列函数

本文探讨了进程替换现象,指出exec系列函数如execle和execve的作用,解释了程序入口地址在ELF格式中的位置,并揭示了C++和shell脚本能跨语言调用的原因——它们本质上都是进程。还讨论了环境变量在进程创建和替换过程中的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.看一下现象

2.了解原理

从上面可以看出,after那句话是没有打印的,说明代码是直接替换掉的。(其实吧,我自己理解觉得即使没有完全替换掉,本身执行ls -a -l 这个进程时也是有返回值的,直接返回了,也没有后面什么事情了,也许是我学的还是有点浅显吧。)

下面就是简单的一个原理

再看一下下面的代码和现象:

从中我们可以看出子进程在替换前后的pid都是没有发生改变的。

说明程序替换中不创建新的进程,只进行进程的程序代码和数据的替换工作。

3.进程替换的现象补充:

1.程序替换成功之后,exec*后续代码不会被执行,替换失败之后才能执行后续代码,所以只有失败的返回值,没有成功的返回值!!

2.我们的CPU如何得知程序的入口地址?

Linux中形成的可执行程序,是有格式的,ELF,可执行程序的表头,可执行程序的入口地址就是在表头中。

4.了解各个exec系列函数:

1.这是简单的四个函数

2.也可以用C语言去调用其他语言

补充一个知识:C++的文件后缀可以是.cpp,.cc,.cxx.下面我还是以.cpp为主

C++:

shell脚本:.sh文件

无论是我们的可执行程序,还是脚本其他语言,为什么能跨语言调用呢?

其实所有语言运行起来,本质都是进程!

3.execle,execvpe

1.给子进程新增一个环境变量

(1)可以在外面搞:

(2)使用putenv函数:

(3)使用execle,execve

1.环境变量是什么时候给进程的?

环境变量也是数据,创建子进程的时候,环境变量就已经被子进程继承下去了,extern char** environ.并且程序替换中,环境变量信息不会被替换。

2.彻底替换环境变量

4.execve系统调用函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值