进程替换..

1、单进程版 – 最简单的先看看程序替换
在这里插入图片描述
在这里插入图片描述
现象就是
1、我们用自己的进程封装了内置指令ls,并且代码中execl 后 printf 的after并没有打印出来。

2、谈进程替换的原理

单进程替换基本原理
在这里插入图片描述

上面例子中execl的做法非常简单粗暴,要调用ls,那么就把mycommand这个进程的代码和数据进行替换,物理空间根据ls的大小进行调整,左边进程地址空间和页表做出相应的调整,然后从新加载的程序main函数入口处重新执行,而并没有创建新的进程!
在这里插入图片描述

3、多进程版 – 验证各种程序替换接口
在这里插入图片描述
在这里插入图片描述
子进程execl调用了ls,父进程也等待成功了,并且没有创建新进程
问题1、在子进程中执行execl会不会影响到父进程呢?如果不会的话为什么?
答:不会,写时拷贝技术,并且进程互相具有独立性

问题2.、在单继承原理说了,替换是简单粗暴的把可执行程序在物理内存中代码和数据
直接替换,那么fork之后创建的子进程把数据进行写时拷贝了,那么代码呢?它也有写时拷贝吗?
在这里插入图片描述
答案:是的,操作系统去写入这个代码,他发现这个代码是父子共享的,所以不能直接替换,所以代码也要进行写时拷贝。
所以写时拷贝不一定只在数据层面,代码上也体现。

问题3、程序替换有没有创建新的子进程?
没有,可以看到调用execl前后的子进程活着和死了之后都是同一个进程Pid

在这里插入图片描述
不创建新进程,只进行进程的程序代码和数据的替换工作!
如果是父子场景发生写时拷贝,不是父子直接替换(单进程场景)
适当的改改页表映射关系,进而让pcb执行新程序。

补充小知识:
1、现象:程序替换成功之后,exec后续的代码不会被执行,替换失败呢?才可能执行后续代码exec函数,只有失败返回值,没有成功返回值!! 替换成功后也没有地方返回

2、我们的CPU如何得知程序的入口地址?
这个入口还不是main函数而是类似CRTmain

在这里插入图片描述
Linux中形成的可执行程序,是有格式的,可执行程序不是杂乱无章的把二进制往里一放,有ELF,可执行程序的表头,可执行程序的入口地址就在表中!! !
所以刚开始一定要把表头先加载到内存当中。

验证接口

先看看execl和execlp的接口如何使用
在这里插入图片描述
execv

在这里插入图片描述

ls是一个可执行程序,它有main函数,它的命令行参数是从myargv[]传入的,即便是list也是要转换为argv[]字符串指针数组传入给ls的 main函数

linux中所有的进程都一定是别人的子进程
命令行中所有的进程都是bash的子进程
所有的进程在启动的时候都是采用exec系列函数启动执行的
exce* 函数承担的是加载器的效果!
目前要知道 我们是可以把命令行参数传递给可执行程序的
就像bash中输入命令ls 我是要启动ls这个进程,那就是直接替换?
4、总结

5、自定义shell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174104.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整型在内存中的存储

前言: 本文章旨在从例题中加深对整型在数据中的存储的相关知识的理解。 首先我们需要明确整型在内存中都是以补码的形式进行计算 例1: 解析: 首先我们需要明确整型在内存中都是以补码的形式进行计算。 接着将一个整型类型的数据存储在ch…

详细介绍如何使用 NeRF 进行 3D 体积渲染-附源码下载

介绍 在此示例中,我们展示了 Ben Mildenhall 等人的研究论文 NeRF:将场景表示为用于视图合成的神经辐射场的最小实现 。等人。作者提出了一种巧妙的方法,通过神经网络对体积场景函数进行建模来合成场景的新颖视图。 为了帮助您直观地理解这一点,让我们从以下问题开始: 是…

基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 设置较大的干扰,PSNR15。 设置较小的干扰,PSNR25。 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 ti…

一周通过Professional Scrum Master(PSM1)考试准备分享

目录 一、为什么要考PSM 二、考试培训费用 三、学习时间 四、备考流程 1.通读Scrum Guide 2.完成Scrum Open的练习题3次 3.找题库刷题 4.再次完成Scrum Open的练习题3次 5.正式参加考试 五、其他考试准备 1.考试资格购买 2.语言 六、后记 一、为什么要考PSM 市面上有不少…

应用开发平台集成工作流系列之17——流程建模功能前端设计与改造回顾

背景 对于流程设置不友好的问题,国内钉钉另行设计与实现了一套流程建模模式,跟bpmn规范无关,有人仿照实现了下,并做了开源(https://github.com/StavinLi/Workflow-Vue3),效果图如下&#xff1a…

蓝桥杯每日一题2023.10.28

题目描述 递增三元组 - 蓝桥云课 (lanqiao.cn) 题目分析 60分解法&#xff1a; 直接暴力循环每一个数进行比较 #include<bits/stdc.h> using namespace std; const int N 2e5 10; typedef long long ll; ll n, a[N], b[N], c[N], ans; int main() {cin >> n;…

从InnoDB索引的数据结构,去理解索引

从InnoDB索引的数据结构&#xff0c;去理解索引 1、InnoDB 中的 BTree1.1、BTree 的组成1.2、BTree中的数据页 2、聚簇索引2.1、聚簇索引的特点2.2、聚簇索引的结构示例2.3、聚簇索引的优缺点 3、非聚簇索引3.1、非聚簇索引结构示例3.2、关于回表3.3、聚簇索引和非聚簇索引的区…

STM32G030F6P6点灯闪烁

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…

centos ubantu IP一直变化,远程连接不上问题

文章目录 一、为什么IP地址会变1.主机DHCP导致 二、解决IP地址变化1.centos2.ubantu 总结 虚拟机能连接为互联网,但下一次启动IP地址再发生变化,无法使用ssh远程连接 一、为什么IP地址会变 1.主机DHCP导致 虚拟机系统(ubantu,centos…)启动后会向本地申请IP地址租约,租聘的I…

单片机为什么一直用C语言,不用其他编程语言?

单片机为什么一直用C语言&#xff0c;不用其他编程语言&#xff1f; 51 单片机规模小得拮据&#xff0c;C 的优势几乎看不到。放个类型信息进去都费劲&#xff0c;你还想用虚函数&#xff1f;还想模板展开&#xff1f;程序轻松破 10k。最近很多小伙伴找我&#xff0c;说想要一些…

vue3学习(十四)--- vue3中css新特性

文章目录 样式穿透:deep()scoped的原理 插槽选择器:slotted()全局选择器:global()动态绑定CSScss module 样式穿透:deep() 主要是用于修改很多vue常用的组件库&#xff08;element, vant, AntDesigin&#xff09;&#xff0c;虽然配好了样式但是还是需要更改其他的样式就需要用…

Linux系统之file命令的基本使用

Linux系统之file命令的基本使用 一、file命令介绍1.1 Linux简介1.2 file命令简介 二、file命令的使用帮助2.1 file命令的help帮助信息2.2 file命令的语法解释2.3 file命令的man手册 三、文件类型介绍四、file命令的基本使用4.1 查询file版本4.2 显示文件类型4.3 输出时不显示文…

【Truffle】二、自定义合约测试

一、准备测试 上期我们自己安装部署了truffle&#xff0c;并且体验了测试用例的整个测试流程&#xff0c;实际开发中&#xff0c;我们可以对自己的合约进行测试。 我们首先先明白自定义合约测试需要几个文件 合约文件&#xff1a;既然要测试合约&#xff0c;肯定要有合约的源码…

玩转视图变量,轻松实现动态可视化数据分析

前言 在当今数据驱动的世界中&#xff0c;数据分析已经成为了企业和组织中不可或缺的一部分。传统的静态数据分析方法往往无法满足快速变化的业务需求和实时决策的要求。为了更好地应对这些挑战&#xff0c;观测云的动态可视化数据分析应运而生。 在动态可视化数据分析中&…

WLAN的组网架构和工作原理

目录 WLAN的组网架构 FAT AP架构 AC FIT AP架构 敏捷分布式AP 下一代园区网络&#xff1a;智简园区&#xff08;大中型园区网络&#xff09; WLAN工作原理 WLAN工作流程 1.AP上线 &#xff08;1&#xff09;AP获取IP地址&#xff1b; &#xff08;2&#xff09;AP发…

刷题学习记录

sql注入&#xff08;bugkuctf&#xff09; 打开显示一个登录框 照常用admin用户名登录&#xff0c;密码随便填一个&#xff0c;显示密码错误 接着用admin为用户名登录&#xff0c;密码照样随便填,结果显示用户名不存在 题目提示基于布尔的SQL盲注&#xff0c;猜测后端是判断用…

【华为OD:C++机试】Day-1

目录 &#x1f337;1. 统计监控、需要打开多少监控器&#xff1a; &#x1f337;2. 阿里巴巴找黄金宝箱&#xff1a; &#x1f337;3. 事件推送&#xff1a; &#x1f337;4. 分苹果&#xff1a; &#x1f337;5. 乱序整数序列两数之和绝对值最小&#xff1a; &#x1f337;6.卡…

JDK项目分析的经验分享

基本类型的包装类(Character放在最后) String、StringBuffer、StringBuilder、StringJoiner、StringTokenizer(补充正则表达式的知识) CharacterIterator、StringCharacterIterator、CharsetProvider、CharsetEncoder、CharsetDecoder(较难) java.util.function下的函数表…

koa搭建服务器(二)

在上一篇文章已经成功的运行了一个http服务器&#xff0c;接下来就是使用Sequelize ORM&#xff08;官方文档&#xff1a;Sequelize 简介 | Sequelize中文文档 | Sequelize中文网&#xff09;来操作数据库。 1、安装依赖 首先也是需要安装相关的依赖 npm i sequelize npm i …

计算机网络——物理层

目录 一、物理层的基本概念 &#xff08;一&#xff09;四大特征 &#xff08;二&#xff09;两种信号 &#xff08;三&#xff09;调制和编码 &#xff08;四&#xff09;传输介质 1. 双绞线 &#xff08;1&#xff09;屏蔽双绞线 STP &#xff08;2&#xff09;非屏蔽…