Linux 之exec系列函数

当进程调用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函数用来创建新进程,直到程序结束后才继续运行父进程。一般运行脚本文件

你可能感兴趣的:(Linux)