【linux初阶】进程替换的简单理解

一.进程替换的原理

进程调用通常使用exec的函数,当调用该函数时,进程的代码和数据将被新进程所替代,其实通俗的话将就是将磁盘上的新程序加载到物理内存原来指向的位置上,这样就会替换掉原来进程所有的代码和数据。同时页表和进程地址空间没有发生变化。值得注意的是在调用exec函数之前的旧进程的代码还是会实现的,因为这个时候进程还没有进行替换。

二.六种替换函数

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[]);

带v的,意味着它的参数格式是数组,带 l 的意味着它的参数格式是参数列表,带p的意味着不需要指定路径,他会自行寻找目标位置,带 e 的需要自行传入环境变量。

使用方法如下:

第一个参数是这个命令的路径,第二个参数是命令名称,第三个是命令行参数,第四个NULL是固定的表示截至

execl("/bin/ps", "ps", "-ef", NULL);

 第一个参数表示部分路径,他会自行搜索,其余于参数与上文一致

execlp("ps", "ps", "-ef", NULL); 

 需要多传一个环境变量,这个也能解释子进程继承父进程环境变量

 execle("ps", "ps", "-ef", NULL, envp);

 其实本质和上文是一样的,只不过将参数放在数组内,传的是数组

char *const argv[] = {"ps", "-ef", NULL};
execvp("ps", argv);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值