Man page - exec(3)

Packages contains this manual

Available languages:

en fr pl ja zh_TW zh_CN de

Manual

EXEC

NAME
总 览 (SYNOPSIS)
描 述 (DESCRIPTION)
返 回 值 (RETURN VALUE)
文 件 (FILE)
错 误 (ERROR)
另 见 (SEE ALSO)
兼 容 性 (COMPATIBILITY)
遵 循 (CONFORMING TO)
[中 文 版 维 护 人 ]
[中 文 版 最 新 更 新 ]
《 中 国 Linux论 坛 man手 册 页 翻 译 计 划 》


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 指 针 结 束 !

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

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

某 些 函 数 有 特 殊 的 语 义 .

如 果 提 供 的 文 件 名 中 不 包 含 斜 杠 符 (/), 函 数 execlp execvp 将 同 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 在 这 儿 采 取 了 传 统 的 "当 前 目 录 优 先 " 缺 省 路 径 .

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

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

遵 循 (CONFORMING TO)

execl , execv , execle , execlp execvp 遵 循 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