进程替换
替换进程所运行的程序
流程:将另一段代码加载到内存中,通过页表将原来进程的映射关系重新建立到新的程序在内存中的地址,相当于替换了进程所运行程序以及所要处理的数据
(替换了代码段,重新初始化数据段)
目的:让程序执行其他任务
如何替换:exec函数家族
execl execlp execle execv execvp (这五个为库函数)
execve (这个为系统调用函数)
命名理解:
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量
l 与 v的区别:
execl ( ls, -a, -i, NULL )——参数平铺赋予
execv ( )——用数组传输
有p 与没有 p 的区别:是否自动到 PATH 所指定的路径下查找程序文件
不带 p 需要自己给路径
execl (" bin/ls", "ls", "-1", NULL)
execlp ("ls", "ls", "-1", NULL)
有没有 e 的区别:是否自定义环境变量
env[0] = "MYENV = 1000" env[1] = NULL
execle (" /bin/ls", "ls", "-a", NULL, env)
main函数中的参数解析:
int main(init argc, char* argv[], char* env[])
argc:程序中有几个命令行参数
argv:用于储存这些参数
env:用于储存环境变量
自主实现一个简易的minishell:
代码实现: