exec
2015-12-01 20:53
495 查看
exec
可加载可执行文件(ELF)或具有X权限的脚本
exec并不创建新进程,调用exec前后该进程id并未改变。
进程调用exec函数以执行另一个程序,当前进程的用户空间代码和数据完全被新程序替代,从新程序启动例程开始执行。
#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[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
不带字母p(标识path)的exec函数,第一参数必须是程序相对路径或绝对路径,eg. /bin/ls 或./a.out,而不能是ls或a.out。故其参数名为path。
对于带p的函数,包含/表路径名;无路径在环境变量PATH列表中搜索程序。故其参数为file(可执行程序名)。
按照惯例,argv或arg的第一参数为程序名,最后一参数为NULL。
l的函数要求将新程序的每个命令行参数都当作一个参数传给它,参数个数可变。
失败-1,成功不返回。
execl("ls", "ls", "-al", NULL); 错误
execl("/bin/ls", "ls", "-al", NULL); 正确
char *exec_argv[3] = {"ls", "-al", NULL};
execvp("ls", exec_argv); 正确
execv("ls", exec_argv); 错误
可加载可执行文件(ELF)或具有X权限的脚本
exec并不创建新进程,调用exec前后该进程id并未改变。
进程调用exec函数以执行另一个程序,当前进程的用户空间代码和数据完全被新程序替代,从新程序启动例程开始执行。
#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[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
不带字母p(标识path)的exec函数,第一参数必须是程序相对路径或绝对路径,eg. /bin/ls 或./a.out,而不能是ls或a.out。故其参数名为path。
对于带p的函数,包含/表路径名;无路径在环境变量PATH列表中搜索程序。故其参数为file(可执行程序名)。
按照惯例,argv或arg的第一参数为程序名,最后一参数为NULL。
l的函数要求将新程序的每个命令行参数都当作一个参数传给它,参数个数可变。
失败-1,成功不返回。
execl("ls", "ls", "-al", NULL); 错误
execl("/bin/ls", "ls", "-al", NULL); 正确
char *exec_argv[3] = {"ls", "-al", NULL};
execvp("ls", exec_argv); 正确
execv("ls", exec_argv); 错误
相关文章推荐
- MediaPlayer的使用
- C++11的新特性 不会隐式转化的赋值和编译求值的constexper
- Servlet开发
- WebKit(WKUIDelegate)
- HDU 1698 Just a Hook 题解&代码
- Java新手之路——Day05 运算符
- ubuntu下安装交叉编译工具链
- Docker初级学习-安装Docker
- ASP.net MVC4 + mono+ ubuntu15.1+ jexus +ef6 +mysql (linq to mysql) 实录,以及各类错误总结
- Educational Codeforces Round 2 D. Area of Two Circles' Intersection
- 常用内部排序算法之二:快速排序
- Java相似知识点区别
- 栈的学习-四则运算实例
- 【设计模式】一些通用的面向对象设计原则简介
- UI 手势
- http请求和http响应的详细解析
- 控件阴影效果
- static关键字作用总结
- BZOJ 1997: [Hnoi2010]Planar( 2sat )
- 利用MAVEN打包时,如何包含更多的资源文件