exec函数族
exec函数族有一系列相关的函数组成,他们在进程的启动方式和程序参数的表达方式上有所不同,exec可以吧一个进程替换成另一个进程,他跟system最大的区别是,新进程启动后原来的进程就终止了
#include<unistd.h> int execl(const char *path, const char *arg0, ...(char*)0); int execlp(const char *file, const char *arg, ...(char*)0); int execle(const char *path, const char *arg, ...,(char *)0,char * const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[], char *const envp[]);
execl、execlp、execle(带“l”)的函数参数可变;
名字含字母“p”的函数会搜索PATH环境变量去查找新程序的可执行文件。如果可执行文件不在PATH定义的路径上,就必须把包括子目录在内的绝对文件名做为一个参数传递给这些函数。
名字最后一个字母为"e"的函数可以自设环境变量。
这些函数通常都是用execve实现的,虽然并不是必须要这样做。
一个exec的例子
#include<unistd.h> #include<stdio.h> #include<stdlib.h> int main(void) { puts("running ps with execlp;"); execlp("ps","ps","l",0); puts("Done!"); exit(0); }