自学内容网 自学内容网

【Linux】进程程序替换

目录

单进程版的程序替换

程序替换的原理

多进程版的程序替换

替换原理

CPU如何知道程序的入口地址?

替换函数

execl

execlp

execv

execvp

execle

函数解释

命名理解


单进程版的程序替换

程序替换的原理

把自己的代码和数据替换成其他的代码和数据,然后再执行一遍新的代码。进程的内核数据结构不变。

多进程版的程序替换

子进程进行程序替换不会影响父进程,

数据可以触发写时拷贝,但是代码不可被写入,怎么办?事实上代码也可以触发写时拷贝,不过不能自己写,而是系统写。

程序替换没有创建新进程,只进行进程的代码和数据的替换。

替换原理

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

程序替换后,替换函数后面的代码不会执行。

替换失败就继续执行后面的代码。

所以替换函数只有失败返回值没有成功返回值。

CPU如何知道程序的入口地址?

linux形成的可执行程序是elf格式,这种格式最开始有可执行程序的表头,可执行程序的入口地址就在表里面。

替换函数

这些是库函数

这个是系统调用

execl

函数名都有exec,l可以理解为list,表示第二个参数开始是一个一个的可变参数,和命令行参数一样。

execl第一个参数是找到这个程序的位置,后面的参数是如何执行这个程序。

   

execlp

execlp,p表示会默认在PATH环境变量中查找,所以你不用给我路径,直接给我文件名就行。

execv

execv,v可以理解为vector,第二个参数是一个字符串指针数组。

execvp

execvp,写程序名就行,路径会在PATH环境变量里面找。

execle

程序替换后,环境变量信息不会被替换。

在父进程里面putenv,新增的环境变量会继承给子进程。

execle,可以自定义环境变量表

把系统的环境变量表给新的程序

自定义环境变量表,这里会覆盖原本的环境变量表。

函数解释

命名理解


原文地址:https://blog.csdn.net/m0_71164215/article/details/143864770

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!