整个函数家族如下: #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[]); 在名字中缺“e”的是从当前进程中拷贝环境,有字母“p”的是可以在当前路径中查找文件,而其他函数必须在指定路径中找 一个例子: /*parent.c*/ #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main(void) { pid_t pid; //const char *usr_envp[] = {"MYDEFINE=unknown","PATH=/home/xiao/code/",NULL};//路径 printf("Begin Fork()/n"); pid = fork(); switch(pid) { case -1: perror("fork failed!/n"); break; case 0: /*准备执行子进程的程序*/ //if(execle("/home/xiao/code/test/child","myarg1","myarg2","myarg3",(char *)0,usr_envp)) //路径/home/child,参数... if(execlp("./child","myarg1","myarg2","myarg3",(char *)0)) //路径/home/child,参数... perror("execle failed!/n"); break; default: break; } //等待子进程退出 if(waitpid(pid,NULL,0)<0) perror("waitpid failed!/n"); printf("parent excting!"); return 0; } /*child.c*/ #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main(int argc,char *argv[]) { int i; //char **pStr; //extern char **environ; printf("child starting!/n"); //打印出参数名 for(i = 0;i < argc;i++) { printf("argv[%d]:%s/n",i,argv[i]); } //打印出路径名 /*for(pStr = environ; *pStr != 0;pStr++) { printf("%s/n",i,*pStr); } */ printf("child exiting!/n"); return 0; }