【Linux:进程程序替换】

进程程序替换的原理:

替换正在运行的程序,让正在进行的程序

一个程序运行起来时,会有一个task_struct结构体,里面含有一个内存指针,而内存指针指向了虚拟地址空间,通过页表与物理内存进行映射。

替换程序替换所做的工作:

1.替换当前进程的代码段和数据段为新程序,刷新堆栈

2.进程替换完毕后,该进程的进程pid是没有变化的(结合公司岗位调度理解,你的岗位替换了,但是公司没换)

进程替换的函数:exec函数簇:

  • int  execl (const*path,const*arg,...)  

path是替换进程的地址,arg是给可执行程序传命令行参数,....是可变参数列表

注意:1.第一个参数必须是可执行程序本身

           2.可变参数列表也是填充给可执行程序的参数,需要以NULL结尾

返回值:替换成功,没有返回值,替换失败,返回值为-1

  • int execlp (const char*file, const char *arg,...);

file:待要替换的可执行程序,可以不用给路径(与execl的区别,不用给路径的这个可执行程序一定要在PATH环境变量中可以搜索到)

函数名带P与不带P的区别

1.函数名称中带P。表示会自动搜索环境变量

2.函数名中不带P,表示不会自动搜索环境变量,需要给待替换的可执行程序带上路径
  • int execle(const char*path, const char *arg, ..., char *const envp[]);

envp[]:表示程序员需要自己组织环境变量

函数名中带e和不带e的区别
带e表示程序员自己组织环境变量
不带e表示程序员不需要自己组织环境变量
函数名称中带有l表示函数的参数为可变参数列表,否则不是
  • int execv(const char *path,char *const argv[]);
  • int execvp(const char *file,char *const argv[]);

file:待要替换的可执行程序,可以不用给路径

argv[]:指针数组,保存的是可执行程序传递的参数

注意:1.数组的第一个元素必须是可执行程序本身

           2.数组的最后一个元素应该为NULL

  • int execve(const char*filename,char *const argv[],char *const envp[]);

filename:带有路径的可执行程序

argv:可执行程序传递的参数   第一个参数应该是其本身,最后一个参数应该是NULL

envp[]:程序员自己组织环境变量,最后一个参上一定是NULL

圈起来的都是库函数,库函数是依靠系统调用函数

  • 进程程序替换在工业中常见的场景:

  1. bash的应用场景

2.守护进程

守护进程如何得知业务进程正常?

业务进程会在特定的时间内往一个内存中返回一个时间,守护进程在这个内存中拿取这个时间,如果时间没有发生变化则说明业务进程异常,此时守护进程会重新创建一个业务进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dongliner~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值