进程程序替换---exec函数族

来源:互联网 发布:php 5.2.8 win32.zip 编辑:程序博客网 时间:2024/06/05 03:31

        当我们fork创建新的子进程后,子进程通常调用exec函数以执行另一个程序。当进程

调用exec函数时,进程执行的程序完全替换为新的程序。exec并不创建新的进程,

所以前后进程的ID并未改变。(exec函数使得进程控制更加完善)

有六个以exec开头的函数,统称为exec函数

  #include <unistd.h>

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[]);

exec+l  :

          字母  l(list)要求将命令中的每个命令行参数都当做参数传给它,命令行参数可

变。最后以NULL结尾

exec+v

         字母 v (vector)构造一个指向各个参数的指针数组,把数组首地址当做参数传

递,数组中最后也已NULL结尾

exec+e

         字母 e (environment)把新的环境变量表传给它。

exec+p

        不带字母p (表示path)的exec函数 第一个参数必须是程序的相对路径或绝对路径,例

如"/bin/ls"或"./a.out",而不能 是"ls"或"a.out"。

        对于带字母p的函数: 如果参数中包含/,则将其视为路径名。 否则视为不带路径的程

序名,在PATH环境变量的目录列表中搜索这个程序。

    l 和 v 不共存。

   这些函数如果调用成功直接执行新的程序,出错返回 -1 。因此只有出错返回值

   这些函数中只有execve是内核的系统调用。其他的只是库函数,最终都要调用execve。


   



原创粉丝点击