execve、execv、execvp、execle、execl、execlp这六个函数都是在父进程中fork一个子进程,然后在子进程中exec调用新程序。在这六个函数中只有execve是内核级系统调用,其余5个都是通过调用execve来实现。
这六个函数的区别,主要是在参数上,可以通过名字来方便记忆。
-
l表示参数为list,即形如:execl("/bin/sh", "-c", "id", NULL)
-
v表示参数为vector,即形如:char * const argv = {"/bin/sh", "-c", "id", NULL}; execv("/bin/sh", argv)
-
p表示在默认路径$PATH中查找
-
e表示参数中有环境变量,环境变量也是以vector的形式传递,作为最后一个参数