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. 如果 发生 这三类 错误, 他们 就 返回. 而 现在的 做法是, 不仅仅 上述的 错误, 任何 错误 均导致 函数 返回.
execl, execlp, execle, execv, execvp - 执行某个文件的更多相关文章
- linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用
本节目标: exec替换进程映像 exec关联函数组(execl.execlp.execle.execv.execvp) 一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程 ...
- exec系列函数(execl,execlp,execle,execv,execvp)使用
本节目标: exec替换进程映像 exec关联函数组(execl.execlp.execle.execv.execvp) 一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程 ...
- exec 家族库函数以及系统调用(execl,execle,execlp and execv,execvp,execve)
(1)exec函数说明 fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法.它可以根据指定的 ...
- execl执行解释器文件以及shell命令
问题描述: execl执行解释器文件以及shell命令 问题解决: 具体源文件:
- 内核启动文件系统后第一个执行的文件(inittab启动脚本分析)
Linux 开机脚本启动顺序: 第一步:启动内核 第二步:执行init (配置文件/etc/inittab) 第三步:启动相应的脚本,执行inittab脚本,并且执行里面的脚本/etc/init.d ...
- 安装Redis 编译make gcc: error trying to exec 'cc1': execvp: 没有该文件或目录的错误
Linux(Redhat) make: gcc: error trying to exec 'cc1': execvp: 没有该文件或目录的错误 排查错误: 1.检查gcc.gcc-c++是否安装rp ...
- myeclipse(2015)中创建简单的Maven项目的步骤(用于生成可执行jar文件)------》myeclipse2015
利用MyEclipse的引导,可以很方便的创建简单的.用于生成可执行jar文件的Maven项目: 1.New -> Project... 选择 Maven Project, 点击Next > ...
- Mysql执行大文件sql语句 -- 未测试
如果.sql文件过大,mysql会直接断开连接 解决方法: 在mysql的配置文件my.cnf 中加入 一行max_allowed_packet = 100M(该大小>=mysql.sql文件大 ...
- Linux下执行.sh文件
Linux下执行.sh文件有两种情况: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh,如运行hello.s ...
随机推荐
- [laravel]phpunit
step1.install phpunit composer.json require中增加 "phpunit/phpunit":"4.0.*" 执行 comp ...
- 相对定位relative与绝对定位absolute
relative:相对定位,并没有脱离原来文档流,依然在原来的位置上,可以通过设置left,top,来设置自己的偏移量,但是它依然占据自己原来的位置,偏移的位置会遮盖其他的元素 absolute:绝对 ...
- bzoj4555
ntt+cdq分治 原来zwh出的cf是斯特林 第二类斯特林数的定义是S(i,j)表示将i个物品分到j个无序集合的方案数,那么这道题中S(i,j)*j!*2^j是指将i个物品分到j个有序集合中并且每个 ...
- Ubuntu中字体的改变
1.sudo dpkg-reconfigure console-setup 2.弹出 Configuring console-setup 界面,选择适当的编码格式,我们一般选择默认的UTF-8,选择O ...
- thinkphp整合swoole
cli模式下执行thinkphp1.cd 项目根目录2.php index.php admin/index/index --执行 模块/控制器/方法名 异步消息队列1.服务器端核心代码 /** * 脚 ...
- Phoenix在2345公司的实践(转)
本文介绍Phoenix在2345公司的实践,主要是实时查询平台的背景.难点.Phoenix解决的问题.Phoenix-Sql的优化以及Phoenix与实时数仓的融合思路.具体内容如下: 实时数据查询时 ...
- 二分优化的lis
/*此题为一个女大佬教我的,%%%%%%%%%%%%*/ 题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为 ...
- iOS 在UITextView中查找某个Range所在的Rect
代码如下(Swift 4): extension UITextView { /// 查找文本范围所在的矩形范围 /// /// - Parameter range: 文本范围 /// - Return ...
- Hexo瞎折腾系列(6) - 将博客同时部署到Github和Coding
前言 由于本人只是将Hexo博客同时部署到 Github 和 Coding.net ,所以这里只介绍怎么同时部署到这两个网站的pages. 之所以选择这两个网站,是因为国外用户可以访问 Github, ...
- jmeter(二十二)jmeter测试Java请求
目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...