进程程序替换

为什么要进行进程程序替换

  父进程创建出来的子进程与父进程拥有相同的代码,所以,子进程看到的代码和父进程是一样的。当我们想要让子进程执行不同的程序时,就需要让子进程调用进程程序替换的接口,从而让子进程执行不一样的代码。

原理:替换进程的代码段和数据段,更新堆栈。

替换函数

其实有六种以exec开头的函数,统称exec函数:

头文件:#include <unistd.h>

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 execve(const char *path, char *const argv[],char *const  envp[]); 
函数解释
这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。
如果调用出错则返回-1
所以exec函数只有出错的返回值而没有成功的返回值。
命令理解
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量
execl为例
找到其路径:

替换成功如下: 

 事实上,只有execve是真正的系统调用,其它五个函数最终都调用 execve。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值