在linux中有六种调用形式
#include <unistd.h>
extern char **environ;
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[]);
六个函数中,只有execve()是系统调用,其他的都是c库函数。这些函数都是以exec开头,后面的字母表示了用法上的区别:
带有“l”的,表明第一个参数必须是要执行程序,最后一个参数必须是NULL,
带有“p”的,第一个参数可以使相对路径或程序名,其他的第一个参数必须是绝对路径名
带有“v”的,程序的参数列表通过一个字符数组来传递
带有“e”的,用户可以自己设置程序接收一个设置环境变量的数组
exec()执行时会取代当前进程中的代码段,数据段,堆栈