在前面的章节中,我们讨论了如何使用 fork
函数创建子进程,通常子进程会调用一种 exec
函数来执行另一个程序。当进程调用 exec
函数时,该进程会完全被新程序取代,而新程序则从其 main
函数开始执行。因为调用 exec
并不创建新进程,所以前后的进程 ID 并不会改变。exec
只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。
有六种不同的 exec
函数可以使用,它们常常被统称为 exec
函数。这些 exec
函数是 UNIX 进程控制原语。用 fork
可以创建新进程,用 exec
可以执行新的程序。exit
函数和两个 wait
函数处理终止和等待终止。这些是我们需要的基本进程控制原语。在后面各节中将使用这些原语构造另外一些如 popen
和 system
之类的函数。
#include <unistd.h>
int execl(const char *pathname, const char *arg0, ... /* (char *) 0 */);
int execv(const char *pathname, char *const argv[]);
int execle(const char *pathname, const char *arg0, ... /* (char *)0, char *const envp[] */);
int execve(const char *pathname, char *const argv[], char *const envp[]);
int execlp(const char *filename, const char *arg0, ... /* (char *) 0 */);
int execvp(const char *filename, char *const argv[]);
</unistd.h>
这六个函数的返回值:如果出错则返回 -1,如果成功则不返回。这些函数之间的第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。
为了更好地理解这些内容,可以参考以下几篇相关资料:
暂无评论