系统编程-exec函数族的使用
fork
创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec
函数以执行另一个程序。当进程调用一种exec
函数时,该进程的用户控件代码和数据完全被新程序替换,从新程序的启动例程开始执行。执行exec
并不创建新进程,所以调用exec前后该进程的id并未改变。
将当前进程的.text
、.data
替换为所要加载的程序的.text
、.data
,然后让进程从新的.text
第一条指令开始执行,但进程ID
不变,换核不换壳。
//该函数通常用来调用用户自定义的可执行程序
int execl(const char *path, const char *arg, ...);
//该函数通常用来调用系统程序。如:ls、date、cp、cat等命令。
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