exec进程替换,替换的其实是进程的代码段,数据段,堆栈段。
几种函数的使用情况:
char* const argv[] = {"ls","-al", NULL};
char* const envp[] = {"PATH=/bin:/usr/bin","TERM=console",NULL};
// + l(list) 1.路径是绝对路径
// 2.表示后面的参数是以列表形式给出,以NULL结尾
int ret = execl("/bin/ls", "ls", "-al", NULL);
// + p(path) 1.表示可以使用环境变量PATH,因此可以不带绝对路径
int ret = execlp("ls", "ls", "-al", NULL);
// + v(vector) 1.路径是绝对路径
// 2.表示后面的参数是以数组形式给出,以NULL结尾
int ret = execv("/bin/ls", argv);
// vector + path 数组,不带绝对路径
int ret = execvp("ls",argv);
//list + env 列表,自定义环境变量
int ret = execle("ls","ls", "-al", NULL, envp);
//vextor + env 数组+自定义环境变量
int ret = execve("bin/ls", argv, envp);