总览 (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 忽略 所有 错误, 除了 上述的 错误, ENOMEM
E2BIG. 如果 发生 这三类 错误, 他们 就 返回. 而 现在的 做法是, 不仅仅 上述的 错误, 任何 错误 均导致 函数 返回.

最新文章

  1. [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变
  2. 股指的趋势持续研究(Hurst指数)
  3. cloudfoundry上搭建go服务端
  4. POJ 2251 BFS(简单)
  5. Spring AOP简述
  6. bat批处理完成jdk tomcat的安装
  7. 65. Reverse Integer &amp;&amp; Palindrome Number
  8. C# 修改电脑DNS和IP方法
  9. MD5算法 简介
  10. IntelliJ IDEA 12.0
  11. VBS_DO...Loop
  12. Linux基础(三)
  13. win10 3dmax 激活后反复激活和激活码无效问题
  14. [HNOI2001]求正整数
  15. CentOS7.2卸载完CDH5.12后重装CDH
  16. python金融与量化分析------Matplotlib(绘图和可视化)
  17. sql----&gt;sql-summary&amp;mysql-summary
  18. java Enum 类型互转
  19. 高级需求分析UML建模设计模式笔记
  20. git学习——&lt;五&gt;git分支

热门文章

  1. 依赖倒置原则DIP&amp;控制反转IOC&amp;依赖注入DI
  2. codeforces 724C
  3. hdu 3622 Bomb Game【二分+2-SAT+tarjan】
  4. Codeforces732D Exams
  5. P5167 xtq的神笔
  6. P1219 最优贸易
  7. NOIp2017真题模拟赛 By cellur925
  8. the little schemer 笔记(10)
  9. Milking Grid POJ - 2185 || 最小覆盖子串
  10. h5-29-WEB存储-通讯录实战.html