当进程调用exec系列函数中的任一个时,该进程用户空间资源(正文、数据、堆、栈)完全由新程序替代。因为调用exec并不创建新程序,如果无特殊指示代码,进程内核信息基本不用修改
(1)execl函数声明如下:
// from /usr/include/unistd.h
int execl(const char* path,const char* arg,...);
例子 : execl("/bin/ls","ls","-l","/home",(char*)0);
第一个参数表示execl要执行的程序,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。
(2)execle函数声明如下:
// from /usr/include/unistd.h
int execle(const char* path,const char* arg,...);
例子:execle("/bin/ls","ls","-l","/home",(char*)0,env);
execle用来执行参数path代表的程序,第二个及以后的参数代表执行文件时传入参数列表,最后一个参数必须指向一个新的环境变量数组,即新执行程序的环境变量。
(3)execlp函数声明如下:
// from /usr/include/unistd.h
int execlp(const char* file,const char* arg,...);
例子:execlp("ls","ls","-l","/home",(char*)0);
execlp会在$PATH环境变量所指向的目录中查找文件名为第一个参数的程序,并执行它,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。
(4)execv函数声明如下:
// from /usr/include/unistd.h
int execv(const char* path,const char* argv[]);
例子:char* argv[] = {"ls","-l","/home",(char*)0};
execv("/bin/ls",argv);
execv函数执行path路径下的程序,第二个参数为数组指针维护的程序参数列表,该数组的最后一个成员必须为NULL.
(5)execvp函数声明如下:
// from /usr/include/unistd.h
int execvp(const char* file,const char* argv[]);
例子:char* argv[] = {"ls","-l","/home",(char*)0};
execv("ls",argv);
execvp会在$PATH环境变量所指向的目录中查找文件名为第一个参数的程序,并执行它,第二个及以后的参数代表执行文件时传递的参数列表,最后一个参数必须是空指针。
(6)system函数声明如下:
//from /usr/include/stdlib.h
int system(const char* command);
system函数用来创建新进程,直到程序结束后才继续运行父进程。一般运行脚本文件