0
点赞
收藏
分享

微信扫一扫

进程程序替换

小典典Rikako 2022-05-05 阅读 70

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

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

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

替换函数

其实有六种以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。

举报

相关推荐

0 条评论