当前位置: 首页 > news >正文

奢侈品网站排名微信网页版二维码

奢侈品网站排名,微信网页版二维码,郓城网站建设电话,新的南宁网站建设公司前言#xff1a;前面我们学洗了Linux进程退出的相关知识#xff0c;了解了什么是进程退出#xff0c;已经进程等待的相关话题#xff0c;今天#xff0c;我们来学习Linux中的进程程序替换#xff0c;进程程序替换在Linux中可以用于实现新程序的启动、程序升级、多进程程序…       前言前面我们学洗了Linux进程退出的相关知识了解了什么是进程退出已经进程等待的相关话题今天我们来学习Linux中的进程程序替换进程程序替换在Linux中可以用于实现新程序的启动、程序升级、多进程程序和程序恢复等多种应用。 目录 1、进程程序替换 什么是程序替换 替换原理 单个进程的程序替换无父子进程 execl函数 程序替换原理详述 父子进程中的程序替换 替换进程如何得知要从程序的最开始开始执行又如何得知最开始的地方在哪里 替换程序覆盖性 exec函数分类 execlp、execv、execvp函数 程序替换只能替换系统程序 C语言替换C或python程序 多文件同时编译的自动化makefile实现 替换自己写的程序 c语言种替换shell脚本语言 环境变量与execle、execvpe函数 定义子进程自己的专属环境变量 execve系统调用 1、进程程序替换 什么是程序替换 在我们之前的讲解中父子进程本质上都在使用同一份代码这也就相当于父子进程在同一套代码之下完成任务而我们创建子进程的目的本来就是为了能让子进程完成一些父进程需要其完成的任务并带给父进程对应的返回结果但是如果父子进程在同一套代码逻辑中那创建子进程不就相当于脱裤子放屁自找麻烦吗其实子进程被创建出来是可以用来执行与父进程不同的程序的程序替换简单来说就是将正在运行的程序替换为另一个程序。这个过程涉及内存加载新程序到内存中并更新页表信息初始化虚拟地址空间然后将现有PCB的指针指向新的程序使得现有PCB从头开始调度新的进程运行。需要注意的是程序替换后当前进程运行完替换后的程序就会退出并不会回去运行原先的程序。 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。 单个进程的程序替换无父子进程 execl函数 execl函数时exec函数中的一种后面的几种我们稍后会提及其功能替换一个指定路径的程序 其中execl的参数path参数就是替换程序所在的文件路径arg就是执行命令的若干个参数比如ls -a -l......这些都属于这个参数这里我们先给出一个最简单的解释比如我们需要执行“ls -a -l”,那么我们在命令行参数中就按这个顺序输入“ls”“-a”“-l”就可以了也就相当于我们在命令行中如何使用在参数中就如何输入即可需要注意的是该函数必须在参数最后加上NULL表示传入参数结束。具体如下面的用例 我们发现一个现象一旦我们进行了程序替换也就是执行了execl函数该函数之后的语句就不会再被执行了上面的例子中execl函数之后的printf函数没能够被执行这一点就和我们程序替换的原理有关下面我们就来对程序替换原理进行详细的分析 程序替换原理详述 在Linux中进程程序替换通常指的是使用exec()系列函数来实现的进程替换过程。这个过程包括加载一个全新的程序代码和数据到调用进程的地址空间中并开始执行新程序。这个过程会替换当前进程的内容原有进程的执行状态和上下文信息会被丢弃。在进程替换发生时原有进程的代码、数据和资源会被新的进程所取代。该替换过程没有创建新的进程只是替换原来的进程。 父子进程中的程序替换 前面我们演示的是单进程的程序替换场景如果在父子进程的模式下又会出现什么样的情况呢我们知道父子进程在不进行写操作时是共享同一份代码和数据的但是如果父进程或者子进程发生了程序替换那么此时剩下的那个进程就要采用我们之前学过的写时拷贝技术来将原有代码和数据拷贝一份供剩余进程使用使得两个进程各自保持自己的独立性。 替换进程如何得知要从程序的最开始开始执行又如何得知最开始的地方在哪里 当我们采用程序替换的方式引入一个新的程序时这个程序如何得知其该从哪个位置开始执行又如何得知其执行的位置在哪里呢实际上每个可执行程序在磁盘中的存储并不是单纯的只是存储代码和数据可执行程序的二进制文件中头部有一个专门的表结构其中专门有一个字段用来表示程序的入口地址通过将其填充到对应的调用进程的程序计数器pc中即可达到调用的效果。这里顺便提一嘴pc指针eip是cpu中的一个寄存器在cpu中只有一个但是并不是所有的进程只有一个pc指针寄存器中的内容可以有多份一个cpu可以有多套内容分别用来对应不同的内容。 替换程序覆盖性 我们在上面的代码中不难发现不论是单个进程的程序替换还是父子进程的程序替换被替换的进程在执行exec函数结束后其后续的代码均不会被执行此时因为程序被替换所以被替换程序会被覆盖导致其后序的代码不会再被执行这个就是替换程序的覆盖性。 exec函数分类 前面我们了解到exec函数具有多种但是各种函数之间的用法和功能却不尽相同下面我们来介绍几种常见的exec函数 execlp、execv、execvp函数 程序替换只能替换系统程序 上面我们的例子只是针对系统程序进行了替换但是不代表程序替换只能局限于系统函数事实上程序替换还可以替换自己写的程序这其中包括其他语言的程序例如c和python程序还有shell脚本语言等下面我们就来演示一下。 C语言替换C或python程序 首先我们来分别编写一个C和python文件 多文件同时编译的自动化makefile实现 当我们想要一次编译两个或两个以上的源文件并形成对应的目标文件时我们就需要只调用一次makefile工具就能直接将所有源文件全部编译但是我们知道makefile从上往下扫描的时候默认只形成扫描到的第一个目标文件所以我们就需要采取一些手段使其能够同时编译出两份目标文件我们可以将两份目标文件封装成一个总的目标文件放在makefile首部这样默认调用的首个目标文件中就包含了我们需要的两个目标文件从而达到目的。 比如我们一次需要形成C和C的可执行程序时我们可以采用如下的方式编写makefile 替换自己写的程序 python程序也是同理python是一种解释型语言Python 解释器在运行代码时不会将其编译为机器语言。相反它会在运行时解释代码所以我们不能够在通过makfile编译形成目标文件来形成所谓的“python的可执行程序”了我们只能通过调用python的解释器来直接解释我们的python文件具体实现如下 c语言种替换shell脚本语言 脚本语言或称为动态编程语言是一种解释型语言。它通常用于执行具有复杂逻辑和流程控制的任务比如网页编程、系统配置、游戏脚本等。其采用系统的bash命令行解释器就可以运行比如我们可以编写和运行如下的shell脚本至于如何编写这里先了解即可这不是我们的重点 此时我们可以将其替换为在程序中运行如下 现在你可以拿着这个和你的朋友装一下了我们可以在c上运行其他语言的代码其实不仅是c语言其他的编程语言都有着类似的程序替换函数感兴趣的可以去百度一下。 环境变量与execle、execvpe函数 环境变量一般是具有全局属性的也就是说它可以被进程和子进程之间共享对于父子进程之间环境变量共用一套无可厚非并且我们也知道父进程的环境变量来源于bash命令行解释器为了验证bash、父进程和子进程的爷、父、孙的关系我们可以将父进程中子进程进程替换的代码修改为输出打印环境变量接着我们利用export向命令行bash进程中加入一个新的临时环境看其是否会被父进程和子进程所接受和显示参考代码如下 接着我们在命令行导入一个临时环境变量到bash进程中去 此时该环境变量就被保存在了bash进程中接着我们编译并运行代码然后我们可以发现打印出的孙子进程的环境变量中存在我们创建的环境变量也就是来自“爷爷”进程的环境变量。 事实上父子进程在传递的过程中子进程是默认继承父进程的去全部的环境变量的并且不会受到程序替换的影响前面已经提到程序替换本质上并没有改变进程的pcb和进程地址空间等内核数据结构只是替换了物理内存上的代码和数据而已而环境变量则是随着进程地址空间上的一个字段上保存的所以子进程在创建的时候会继承父进程的进程地址空间也就把父进程的环境变量给继承了下来。 定义子进程自己的专属环境变量 如果我们的子进程想要定义属于自己的环境变量而不希望再沿用父进程的环境变量就需要用到我们下面的两个函数了 例如此时我们想要修改子进程的被替换程序的环境变量参考代码如下 为了方便显示出我们传入命令行参数的效果我们可以在替换程序中将命令行参数打印出来  运行代码结果如下 可以看到被替换程序的环境变量已经被覆盖式的修改成了我们自己定义的环境变量注意是覆盖不是新增那当我们需要新增时怎么办还记得我们上面给bash添加环境变量时的场景吗想要给子进程在原来的基础上新增环境变量我们只需要在其父进程里创建一个临时环境变量就可以了此时子进程将会继承父进程的环境变量表包括新增的。 execve系统调用 execve接口是在Unix和类Unix操作系统中执行新程序的系统调用。事实上,只有execve是真正的系统调用,其它六个函数最终都调用execve,所以execve在man手册 第2节,其它函数在man手册第3节。这些函数之间的关系如下图所示。 本篇到这里就结束了下期我们将自己动手做一个简单的shell可以实现简易的指令反馈和操作模拟在XShell上的各种指令持续更新...... 真正能给你撑腰的是丰富的知识储备、足够的经济基础持续稳定的情绪可控的生活节奏以后的日子里希望你多长本事多看世界多走些路把时间花在正事上变成自己打心底里喜欢的人世界上任何东西都应该是被吸引来的而不是强求来的梧高峰必至花香蝶自来。
http://www.huolong8.cn/news/58583/

相关文章:

  • access网站开发郑州设计公司
  • 公司网站服务类型怎么填网站导航的建设模板
  • 开发一个定制的网站外包网站开发合同
  • 玉林建设银行网站企业展示网站模板
  • 江东外贸seo网站建设wordpress新主题去版权
  • p2p网上贷款网站建设方案好玩的电脑网页游戏
  • 做网站遇到各种问题wordpress2014
  • 义乌网站开发公司跨境电商开发
  • 网站规划建设前期规划方案科技公司 网站 石家庄
  • 计算机开发工具有哪些做神马网站优化排名软
  • 网站建设与管理的就业方向企业推广怎么做
  • 活动汪活动策划网站深圳装修设计公司排名
  • 苏州专业做网站较好的公司有哪些延安网站开发
  • 多个域名绑定同一网站企业网站优化设计应该把什么放在首位
  • 济南长兴建设集团有限公司网站优品ppt模板网官网
  • 维护网站一年多少钱公司注册地址异常
  • 如何介绍设计的网站知名企业文化案例
  • 监控做直播网站网站开发员属于
  • 电商网站开发人员黄页推广引流网站
  • 网站做多长时间才会成功网站建设方案报价费用明细价格
  • 女人学ui有前途吗seo公司培训
  • 重庆家居网站制作公司湖南建筑信息网平台
  • 设计网站排行wordpress管理密码
  • 网站301是什么意思单一网页开发
  • 网站背景图片素材建筑工程挂网甩浆
  • 郑州 网站建设WordPress文章图片采集插件
  • 狮山网站建设wordpress form插件
  • 珠海手机微信网站建设小程序开发广告设计实习报告
  • 建设工程敎育网网站一个人开发游戏难吗
  • 浙江网站建设优化wordpress 图标