进程程序替换(原理及exec 函数簇)

原理

替换代码段和数据段,从磁盘加载新的代码段和数据段到物理内存,用页表映射回进程虚拟地址空间的代码段、数据段,同时应该将堆栈、命令行参数等变为最初状态,pid 不变、环境变量不变、

应用

exec 函数簇:多个 ecec 结构的函数

int execl(const char* path, const char* arg,...)
path: 带路径的可执行程序,绝对或相对路径
arg: 给可执行程序传递的参数,规定:第一个参数必须是可执行程序的名称
...: 可变参数列表,参数列表要以 NULL 标志参数结束

l :可变参数列表的函数,参数列表要以 NULL 标志参数结束

int execlp(const char* file, const char* arg,...)
file: 可执行文件的名称,可执行程序是必须在环境变量 PATH 当中可以找到的,也可以直接传入可执行程序的绝对路径

p :如果带 p,要替换的程序可以直接给一个程序的名称,回去搜索当前环境变量

int execle(const char* path, const char* arg,..., char* consst envp[])
envp: 给当前所要替换的程序设置环境变量,要以 NULL 结尾

e :如果带有 e,则需要自己去组织环境变量的内容

int execv(const char* path, const char* argv[])
argv: 传入字符数组指针,而不是可变参数列表

v :如果带有 v,则表示需要传入的程序命令行参数为字符数组指针,而不是可变参数列表,字符数组依旧需要以 NULL 结尾

其中,系统调用为 execve,其他的为库函数
在这里插入图片描述

使用场景

  1. 守护进程

基本具备的条件:server 可执行程序,守护进程的程序
守护进程是由守护程序启动的,在守护进程当中,使用到了创建子进程+进程程序替换+进程间通信(判断子进程是否运行正常)
获取状态发现 server 可执行程序并没有更改,则认为 server 状态异常,执行策略就是重新创建子进程,让子进程程序替换,替换为新的 server 可执行程序

server 可执行程序:通过进程间通信,每隔一段时间告诉父进程当前的状态

  1. shell终端
    1.启动 bash 可执行程序
    2.当用户输入命令时,创建子进程,子进程进程程序替换
    3.在子进程进程程序替换时,如果是前台进程,则 bash 负责进程等待
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值