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);
本文详细介绍了exec函数族的使用方法及区别,包括execl、execlp、execv、execvp、execle和execve等函数的具体应用场景。通过示例展示了如何通过这些函数实现进程替换,并解释了不同函数在路径解析、参数传递方式以及环境变量处理上的差异。
1639

被折叠的 条评论
为什么被折叠?



