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

发布时间:2024年01月15日

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,execve

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

(1)可以在外面搞:

(2)使用putenv函数:

(3)使用execle,execve

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

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

2.彻底替换环境变量

文章来源:https://blog.csdn.net/Qianxueban/article/details/135583148
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。