- execl
- execlp
- execv
- execve
exec启动一个新程序,替换原有的进程,而进程的PID不会被改变。
execl函数原型如下:
#includeint execl ( const char *path, const char *arg1, ... );
- path是被执行程序名,包含完整路径。
- arg1至argn是被执行程序所需的命令行参数,以NULL结束。
#include "sys/types.h"
#include "sys/wait.h"
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
int main() {
pid_t pid;
pid = vfork();
if ( pid > 0 ) {
wait ( NULL );
printf ( "This is father processn" );
exit ( 0 );
} else {
execl ( "/bin/ls", "ls", "-al", "./", NULL );
printf ( "This is child processn" );
exit ( 0 );
}
}
execlp
函数原型如下:
#includeint execlp ( const char *path, const char *arg1, ... );
- path是被执行程序名,不含路径,将从环境变量PATH中查找该程序。
- arg1至argn是被执行程序所需的命令行参数,以NULL结束。
#includeexecvint main() { execlp ( "ls", "ls", "-al", "/etc/passwd", ( char * ) 0 ); }
函数原型如下:
#includeint execv ( const char *path, char *const argv[] );
- path是被执行程序名,含完整路径。
- argv是被执行程序所需的命令行参数数组。
#includeexecveint main() { char *argv[] = { ( char * ) "ls", ( char * ) "-al", ( char * ) "/etc/passwd", NULL}; execv ( "/bin/ls", argv ); }
函数原型如下:
#includeint execve ( const char *filename, char *const argv[], char *const envp[] );
execve常用于调用外部程序。
new.c如下:
#include "stdio.h"
int main ( void ) {
printf ( "welcome to here!n" );
return 0;
}
exec.c如下:
#include "stdio.h"
#include "unistd.h"
extern char **environ;
int main ( int argc, char *argv[] ) {
execve ( "./new", argv, environ );
}



