exec 函数族 也许有不少读者从本系列文章一推出就开始读,一直到这里还有一个很大的疑惑:既然所有新进程都是由fork 产生的,而且由fork 产生的子进程和父进程几乎完全一样,那岂不是意味着系统中所有的进程都应该一模一样了吗
而且,就我们的常识来说,当我们执行一个程序的时候,新产生的进程的内容应就是程序的内容才对
是我们理解错了吗
显然不是,要解决这些疑惑,就必须提到我们下面要介绍的exec 系统调用
1 简介 说是exec 系统调用,实际上在 Linux 中,并不存在一个exec()的函数形式,exec 指的是一组函数,一共有6 个,分别是: #include 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[]); 其中只有execve 是真正意义上的系统调用,其它都是在此基础上经过包装的库函数
exec 函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件
这里的可执行文件既可以是二进制文件,也可以是任何Linux 下可执行的脚本文件
与一般情况不同,exec 函数