execve, execl, execlp, execle, exece, execvp
来源:互联网 发布:淘宝设置尹流量佣金 编辑:程序博客网 时间:2024/04/28 16:12
http://www.kernel.org/doc/man-pages/online/pages/man3/exec.3.html
#include <unistd.h>
int execve(constchar*filename,char*constargv[],char*constenvp[]); 只有此函数是系统调用。其他都是C库。
1. filename是可执行文件,或者是脚本。
1)如果是脚本,则脚本以#! interpreter [optional-arg]开始。其中interpreter为第一个参数,optional-arg为第二个参数。脚本名为第三个参数。。。
2)如果是可执行文件,则文件是第一个参数。。。
2. argv和envp字符数组都以NULL指针为结尾。
可以被“被调用的进程,即filename”通过入参访问。即int main(int argc, char *argv[], char *envp[])中后两个参数。
3. execve() 成功情况下不返回;失败情况下返回-1。
4. 调用进程的text, data, bss, and stack 被加载的程序覆盖。
5. If the current program is being ptraced, a SIGTRAP is sent to it after a successful execve().
6. 丢弃了很多父进程的配置,如
未决信号被丢弃;信号恢复默认行为,因为代码段变更;
* The dispositions of any signals that are being caught are reset to the
default (signal(7)).
* Any alternate signal stack is not preserved (sigaltstack(2)).
内存映射都被丢弃;
* Memory mappings are not preserved (mmap(2)).
* Attached System V shared memory segments are detached (shmat(2)).
* POSIX shared memory regions are unmapped (shm_open(3)).
消息队列,信号量,定时器,文件夹,内存锁被关闭;
* Open POSIX message queue descriptors are closed (mq_overview(7)).
* Any open POSIX named semaphores are closed (sem_overview(7)).
* POSIX timers are not preserved (timer_create(2)).
* Any open directory streams are closed (opendir(3)).
* Memory locks are not preserved (mlock(2), mlockall(2)).
用户空间内存存储的动作被丢弃;
* Exit handlers are not preserved (atexit(3), on_exit(3)).
* The floating-point environment is reset to the default (see fenv(3)).
进程属性被丢弃;
不带FD_CLOEXEC的文件描述符保持打开;
所有异步I/O操作被取消(aio_read(3),aio_write(3)).
For the handling of capabilities during execve(), see capabilities(7).
file descriptors 0, 1, and 2 . 一般exec前后都不关闭。
启动新进程时设置环境为C ?
还有set-user-ID and set-group-ID的影响。。。还有环境参数影响。。。
#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[]);
应该没有execvpe和execlpe!
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
execvpe(): _GNU_SOURCE
l 表示参数为list;
v 表示参数为vector;
p 表示在默认路径查找;
e 表示引入环境变量数组;
一般情况下,路径的最后一个元素作为 arg的第一个参数。
如execl ("/bin/vi", "vi", "xxxx", NULL)或 execlp ("vi", "vi", "xxxx", NULL)
带p的表示在$PATH中查找此文件:
1)如果没有$PATH定义,则找缺省定义;
2)如果file带反斜线,则不在$PATH中查找,直接认为file是目录,在file中查找执行;
3)如果在$PATH中查找到一个文件,但没有文件访问权限,则继续查找;如果$PATH所有路径都没有,则返回EACCES错误
- execve, execl, execlp, execle, exece, execvp
- execle, exece, execvp,execve execl, execlp的详解
- execl execlp execle execv execvp execve
- execl、execle、execlp、execv、execve和execvp函数
- execve, execlp, execvp, execle比较
- 5进程原语:execl(),execlp(),execle(),execv(),execvp(),execvp(),execve()
- execve, execlp, execvp, execle比较笔记
- 在进程中运行新代码 execl、execle、execlp、execv、execve和execvp函数
- 在进程中运行新代码 execl、execle、execlp、execv、execve和execvp函数
- Linux下exec函数族(execl,execv,execle,execve,execlp,execvp,fexecve)的使用和对比
- exec系列函数(execl,execlp,execle,execv,execvp)使用
- exec系列函数(execl,execlp,execle,execv,execvp)使用
- unix/linux编程实践教程------execve, execlp, execvp, execle比较笔记
- linux进程编程-替换进程映-exec系列函数(execl,execlp,execle,execv,execvp)使用
- linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用
- linux系统编程:exec系列函数(execl,execlp,execle,execv,execvp)使用
- linux进程编程-替换进程映-exec系列函数(execl,execlp,execle,execv,execvp)使用
- linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)
- Xcode 真机程序发布测试
- 哪个是关于游戏技术的论坛,给个连接呗~~~
- 登录之记住用户与自动登录
- 谈java中的策略设计模式
- sql 大数据量插入优化
- execve, execl, execlp, execle, exece, execvp
- linux常用命令的英文单词缩写
- Web Service学习笔记
- SWT/Jface TreeViewer、Tree如何实现双击事件
- bat find 命令
- CKEditor 3.6 入门
- hoj 1867 哈尔滨工业大学 oj 经理的烦恼 简单的树状数组
- linux 内核学习
- Linux fcntl函数详解