exec函数族,顾名思义,就是一簇函数,他把当前替换成新的,而且该程序通常开始执行! 用fork函数创建子进程后,子进程往往要调用一种exe以执行另一个程序。当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其 main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。有六种不同的exec函数可供使用,它们常常被统称为exec函数。这些exec函数都是UNIX进程控制。用fork可以创建新进程,用exec可以执行新的程序。exit函数和两个wait函数处理终止和等待终止。这些是我们需要的基本的进程控制原语。
现在来看一下exec函数族,先把注意力集中在execve上: int execve(const char *path, char *const argv[], char *const envp[]); execve第1个参数path是被执行应用程序的完整路径,第2个参数argv就是传给被执行应用程序的命令行参数,第3个参数envp是传给被执行应用程序的环境变量。 在这里有点要注意,不管是arg0,还是argv[0]都必须是程序的可执行文件的名字,: execl("/bin/echo", "echo", "executed by execl", NULL)中的echo; execl("/bin/ls", "ls", "/azuo", "-la", (char *)0 )中的ls; execlp("echo", "echo", "executed by execlp", NULL)中的echo;
阅读(1634) | 评论(0) | 转发(0) |