Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       execl, execlp, execle, execv, execvp - 执行某个文件

总览 (SYNOPSIS)

       #include <unistd.h>

       extern char **environ;

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

描述 (DESCRIPTION)

       exec 系列 函数 用 新的 进程 映象 置换 当前的 进程 映象.  本 手册页 描述的 这些 函数 实际上
       是 对 execve(2) 函数 的 前端(front-end) 包装.  (关于  当前进程  的  置换  详见  execve  的
       手册页.)

       这些 函数 的 第一个 参数 是 待执行 程序 的 路径名(文件名).

       在  函数  execl,  execlp, 和 execle 中, const char *arg 以及 省略号 代表 的 参数 可被 视为
       arg0, arg1, ..., argn.  他们 合起来 描述了 指向  null  结尾的  字符串  的  指针  列表,  即
       执行程序  的 参数列表. 作为 约定, 第一个 arg 参数 应该 指向 执行程序名 自身. 参数列表 必须NULL 指针 结束!

       execvexecvp 函数 提供 指向 null 结尾的 字符串 的 指针数组  作为  新程序  的  参数列表.
       作为  约定,  指针数组 中 第一个 元素 应该 指向 执行程序名 自身. 指针数组 必须NULL 指针
       结束!

       execle 函数 同时 说明了 执行进程 的 环境(environment), 他 在  NULL  指针  后面  要求  一个
       附加参数,  NULL  指针  用于  结束  参数列表, 或者说, argv 数组. 这个 附加参数 是 指向 null
       结尾的 字符串 的 指针数组, 他 必须NULL 指针 结束! 其他 函数  从  当前进程  的  environ
       外部变量 中 获取 新进程 的 环境.

       某些 函数 有 特殊的 语义.

       如果  提供的  文件名  中  不包含  斜杠符(/),  函数  execlpexecvp 将 同 shell 一样 搜索
       执行文件. 搜索路径  由  环境变量  PATH  指定.  如果  该  变量  不存在,  则  使用  缺省路径
       ``:/bin:/usr/bin''.  另外, 某些 错误 要 特殊处理.

       如果  对  某个  文件  的 访问 遭到 拒绝 ( execve 返回 EACCES), 这些 函数 将 在 搜索路径 中
       继续 寻找. 如果 没有 找到 符合的 文件, 他们 返回时 把 errno 置为 EACCES.

       如果 无法 识别 文件首部 ( execve 返回 ENOEXEC), 这些 函数 将 以 文件名  作为  第一个  参数
       调用 shell.  (如果 这个 尝试 失败 就 不再 进行 搜索 了.)

返回值 (RETURN VALUE)

       任何 exec 函数 返回 均 表明 发生了 错误. 返回值 是 -1, 全局变量 errno 指出 错误类型.

文件 (FILE)

       /bin/sh

错误 (ERROR)

       这些 函数 均可能 失败, errno 被 置为 库函数 execve(2) 设置的 各种 错误类型.

另见 (SEE ALSO)

       sh(1), execve(2), fork(2), environ(5), ptrace(2)

兼容性 (COMPATIBILITY)

       在  某些 其他系统 中, 缺省路径 (当 环境变量 PATH 不存在) 把 当前目录 列在 /bin/usr/bin
       后面, 这是 为了 防止 特洛伊木马. Linux 在这儿 采取了 传统的 "当前目录优先" 缺省路径.

       当 试图 执行 程序 并且 发生 错误 的 时候, execlpexecvp 的 行为 是 历史 习惯, 但是 没有
       进入  正式文档,  也没有  被  POSIX  标准 说明. BSD (可能 还有 其他 系统) 中 进程 自动 进入
       睡眠, 如果 发生 ETXTBSY, 他们 就 重试. 而 Linux 视此为 严重错误, 并且 立即 返回.

       传统的 做法中, 函数 execlpexecvp 忽略 所有 错误, 除了 上述的 错误,  ENOMEME2BIG.
       如果  发生  这三类  错误,  他们  就  返回. 而 现在的 做法是, 不仅仅 上述的 错误, 任何 错误
       均导致 函数 返回.

遵循 (CONFORMING TO)

       execl, execv, execle, execlpexecvp 遵循 IEEE Std1003.1-88 (``POSIX.1'').

[中文版维护人]

       徐明 <xuming@users.sourceforge.net>

[中文版最新更新]

       2003/05/13

《中国Linux论坛man手册页翻译计划》

       http://cmpp.linuxforum.net

       本页面中文版由中文 man 手册页计划提供。
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh