【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.守护进程

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

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

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux进程管理和进程通信是操作系统中非常重要的概念。我可以为您提供一些关于这两个主题的基本信息。 1. 进程管理: 在Linux中,进程是指在执行中的程序实例。进程管理包括创建、调度、终止和监控进程的活动。以下是一些关于进程管理的关键概念: - 进程标识符(PID):每个进程都有一个唯一的PID,用于标识和跟踪进程。 - 进程状态:进程可以处于运行、就绪、阻塞或终止等不同状态。 - 进程调度:操作系统根据特定算法决定哪个进程应该在给定时间内运行。 - 进程创建:通过fork()系统调用创建子进程,或者通过exec()系列系统调用加载新程序镜像并替换当前进程。 - 进程终止:进程可以自愿终止,或者由其他进程(如父进程或操作系统)强制终止。 - 进程监控:可以使用系统工具(如ps、top)或编程接口(如proc文件系统)来监控和管理进程。 2. 进程通信: 进程通信是指进程之间交换数据和信息的机制。在Linux中,有多种方法可以进行进程间通信,包括: - 管道(Pipe):用于在父子进程或具有亲缘关系的进程之间进行通信。 - 信号(Signal):用于向进程发送简单的通知或中断信号。 - 共享内存(Shared Memory):允许多个进程共享同一块物理内存,以便快速高效地进行数据交换。 - 消息队列(Message Queue):进程可以通过消息队列传递和接收消息。 - 信号量(Semaphore):用于实现进程间的互斥和同步操作。 - 套接字(Socket):适用于网络编程,允许不同主机上的进程进行通信。 这只是对Linux进程管理和进程通信的简要介绍,如果您有任何具体问题或深入了解的需求,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dongliner~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值