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

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系统调用函数

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
exec 是 C 语言中的一个系统调用函数族(exec 函数族),它们用于在进程中执行其他程序exec 函数族的一些常用函数包括 execl、execle、execv、execvp 等。 这些函数用于将当前进程替换为另一个可执行程序,并在新程序中执行指定的命令。使用 exec 函数族可以方便地实现程序的动态执行和进程间的数据传递。 其中,execl 函数execle 函数需要手动传入待执行程序的路径和参数,使用空格分隔参数。execv 函数execvp 函数则需要将参数打包成一个数组,并传入参数数组的首地址。 exec 函数族的原理是通过加载指定的可执行程序替换当前进程的代码段、数据段、堆栈等信息,使得当前进程执行其他程序。被替换的当前进程会完全消失,新的程序会从 main 函数开始执行。 exec 函数族在操作系统中具有广泛的应用,常用于实现 shell 的内置命令,比如在 Linux 中使用 exec 函数族来执行 shell 的 "ls"、"cd" 等命令。此外,exec 函数族还常用于多进程编程中,通过创建子进程并执行其他程序,实现进程间的任务分工和协作。 总之,exec 函数族是 C 语言中用于执行其他程序的一组函数。它们通过替换当前进程的代码段和数据段,实现了在进程中执行其他程序的功能。这些函数在操作系统中广泛使用,对于实现动态执行程序进程间数据传递非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值