进程程序替换
fork() 之后,⽗⼦各⾃执⾏⽗进程代码的⼀部分如果⼦进程就想执⾏⼀个全新的程序呢?进程的程序
替换来完成这个功能!
子进程有自己的代码和数据就会成为真正独立的进程。
程序替换是通过特定的接⼝,加载磁盘上的⼀个全新的程序(代码和数据),加载到调⽤进程的地址空间
中!
4-1替换原理

从磁盘中把要执行的进程的数据和代码加载到内存中,在通过页表映射。
4-2替换函数



关联linux历史知识
1.ls -l -a -l 运行过程
是由父进程bash运行fork()函数,创建子进程,子进程运行execl类函数把子进程替换成要执行的程序,父进程waitpid回收子进程。
2.二进制文件先要加载到内存中,这是由冯曼一诺体系决定,那么你的进程数据和代码是如何加载到内存中的?
excel函数就充当加载器。
其他execl
其实有六种以exec开头的函数,统称exec函数:
cpp
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ...,char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
这些函数如果调⽤成功则加载新的程序从启动代码开始执⾏,不再返回。
• 如果调⽤出错则返回 -1
• 所以 exec 函数只有出错的返回值⽽没有成功的返回值。
• l(list) :表⽰参数采⽤列表
• v(vector) :参数⽤数组
• p(path) :有 p ⾃动搜索环境变量 PATH
• e(env) :表⽰⾃⼰维护环境变量
