进程替换
1️⃣ 什么是进程替换
1.我们想让子进程不执行父进程部分代码,执行新的程序时我们需要进行进程替换。
** 程序替换的原理 ** :
- 将磁盘中的程序,加载入内存结构。
- 重新建立页表映射,谁执行程序替换就程序建立谁的映射(子进程)
2️⃣ 为什么要有进程替换
1.我们需要让子进程执行父进程的代码。
2.让子进程执行磁盘中一个权限的程序(例如:我们通过进程执行其他人写的代码片段等)
效果: 让我们的父进程和子进程彻底分离,并让子进程执行一个全新的程序。会将父进程的代码进行写时拷贝。通过页表直接映射到拷贝后的物理内存。
3️⃣ 如何进程替换
由以下几种系统函数给大家介绍如何进程替换 :
int execl(const char* path,const char *arg,…) 如何找到这个程序 可变参数列表
这个接口是一个个的写入可变参数列表。
int execv (const char *path,char *const argv[])
//路径 指针数组
这个接口使用了指针数组来代替可变参数列表
execv与execl的区别就是传参上的不同。(vecter与list来区别execv与execl)
int execlp(const file,const char arg)
l
//你想执行什么程序 你想怎么执行它
**execlp里的p指的是PATH,执行指令的时候,默认的搜索路径是在环境变量PATH下搜索的。命名带p的,可以不带路径,只需要说出你要执行哪个程序即可。 **
int execvp(const char* file,char *const argv[])
//第一参数PASH 第二个是将命令行参数字符串,统一放入数组中即可完成调用
int execle(const char* path,const char arg,…,char const envp[]);//envp代表环境变量
剩下2种execve与execvpe具体使用自己看可以使用绝对路径或者相对路径。
当进程替换的时候父进程和子进程分离,其代码和数据都进行了写时拷贝。