【Linux】复制进程、了解逻辑地址以及写实拷贝

news2025/1/12 16:14:23

目录

fork()方法原型

父子进程

父子进程的pid

物理地址和逻辑地址

写实拷贝


fork()方法原型

pid_t fork(void);

        pid_t是int类型代表进程的pid号

Linux内核2.4.0定义:

        typedef int  __kernel_pid_t;

        typedef __kernel_pid_t   pid_t;

        每一个进程的pid都是唯一的,同一个程序每次运行都会产生一个新进程,pid不一样但他们的名字是一样的。


父子进程

        fork函数复制当前进程生成一个新进程,调用fork的为父进程,新生成的为子进程。fork在父子进程中都会有返回值:父进程中返回子进程的pid,子进程创建成功返回0,创建失败返回-1。

        所有父进程的资源都拷贝给子进程(父进程定义的东西子进程都有),父子进程一起执行,子进程从fork()返回之后开始执行(所以不会无限执行)。

使用父子进程可以用同一套代码完成不同的事情

        下面使用父子进程分别打印两个字符串

输出,父子进程并发执行


父子进程的pid

pid从1开始往大增长,父进程的pid要比子进程小。

getpid()可以得到自己的pid

getppid()可以得到父进程的pid

父子进程是相对的,子进程再用fork那它就是fork出来进程的父进程了


物理地址和逻辑地址

逻辑地址是指在应用程序角度看到的内存单元、存储单元、网络主机的地址。

物理地址是数据在存储器中的地址。每一个字节单元给以一个唯一的存储器地址。又叫实际地址或绝对地址。

在父进程和子进程中,同一个变量的输出的地址是相同的

        但是它们使用的是不同的空间,可以看到它们存放不同的数值,这可以证明它们的物理地址不是相同的,只是逻辑地址相同。程序输出的都是逻辑地址(相对nul偏移量),物理地址是看不到的。

上面代码中n作为临时变量离起始位置偏移量很远:

        每一个进程的逻辑地址都是由存放代码段(函数)、数据段(全局变量)、堆(new/malloc)、栈(临时变量)、内核的空间构成,并依次远离0x00000000位置。如下图:

        这些空间不一定全部用完,这也是不同程序中输出变量的地址可能相同的原因。


写实拷贝

        如果父子进程用的统一变量的值是一样的,则让它们使用同一物理空间,当父或子进程的变量更改了再给它们分不同空间,这样提高fork的效率。

    当它们用同一空间时,会有一个变量记录用这个空间的进程数量,如果一个进程结束,引用计数-1,另一个可以继续用,不会将这个空间释放。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL多实例管理(mysqld_multi)

定义:就是在一台mysql机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务 1.MySQL多实例介绍 1.1.什么是MySQL多实例 MySQL多实例就…

移动智能终端安全技术要求及测试评价方法

声明 本文是学习移动智能终端安全技术要求及测试评价方法. 下载地址 http://github5.com/view/627而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 移动智能终端测试评价方法 硬件安全 硬件安全的测试方法、预期结果和结果判定如下: a&am…

版本控制 | 一文了解虚拟制作,进入影视制作新赛道

作为一种能够引领未来趋势,颠覆影视制作流程的全新技术,虚拟制作已经慢慢普及到影视制作领域。嗅觉灵敏的资本和目光前瞻的大厂纷纷布局虚拟制作赛道。阅读本篇文章,您将了解到什么是虚拟制作,它的优势所在、如何开展虚拟制作以及…

SpreadJS 16.0.1 中英版 SpreadJS-EN-CN

SpreadJS具有 500 多个 Excel 函数的完整 Angular 电子表格解决方案 快速提供真正类似 Excel 的电子表格体验 - 对 Excel 零依赖。创建财务报告和仪表板,预算和预测模型,科学,工程,卫生保健,教育,科学实验室和更多。 Ω578867473创建自定义电…

【MySQL数据库入门】:库的操作

文章目录库的操作1 创建数据库2 创建数据库案例3 字符集和校验规则3.1 查看系统默认字符集以及校验规则3.2 查看数据库支持的字符集3.3 查看数据库支持的字符集校验规则3.4 校验规则对数据库的影响4 操纵数据库4.1 查看数据库4.2 显示创建语句4.3 修改数据库4.4 数据库删除4.5 …

时序预测 | MATLAB实现SSA-CNN-LSTM麻雀算法优化卷积长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现SSA-CNN-LSTM麻雀算法优化卷积长短期记忆神经网络时间序列预测 目录时序预测 | MATLAB实现SSA-CNN-LSTM麻雀算法优化卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现SSA-CNN-GRU麻雀算法优化卷…

js写的一个简单的时间范围日历

该日历主要是提供一个思路,用以抛砖引玉 该日历从移动端更改而来,所以看着会比较小 日历中基于flex布局,全部使用div模拟 table 来实现,没有用 table 来布局 日历的周次列是固定的,这是基于自己需求来设定的&#x…

平台统一监控的介绍和调研

背景 目前平台缺少强有力的监控工具,单独依靠Spring Boot Admin 还太欠缺,没有大屏、没有分布式链路追踪、自定义告警繁琐,在我的《Spring Boot Admin2》专栏中自定义过JVM监控和异常监控,都需要自己编码定义监控规则和告警&…

OSPF综合实验

1.首先把IP跟环回配上 [R4]int g 0/0/0 [R4-GigabitEthernet0/0/0]ip add 12.1.1.2 24 [R4-GigabitEthernet0/0/0]int g 0/0/2 [R4-GigabitEthernet0/0/2]ip add 32.1.1.2 24 [R4-GigabitEthernet0/0/2]int g 0/0/1 [R4-GigabitEthernet0/0/1]ip add 22.1.1.2 24 [R4-GigabitE…

SRM系统如何应对数字化浪潮,打造万商互联

近几年,大量的大中型企业开始了数字化的采购管理,这意味着从传统的采购方式转向了数字化的采购,从根本上改变了传统的采购方式,实现了对采购系统的优化重组,是战略和战术体系的系统化变革,也为采购数智化、…

STM32 DMA编程时的一个应用小提醒

有人使用STM32H7芯片做些事情,发现基于ST公司的HAL库开发UART1的DMA收发时可以轻松实现,而当使用ST的LL库组织代码时,却没法实现UART的DMA传输。感觉上就是使用HAL库编写代码功能正常而基于LL库则不行。真是这样吗?使用STM32CubeM…

磁盘管理与配置

磁盘管理的概念 Windows Server 2012 R2支持基本分区和动态分区两类分区,实现了跨区卷、带区卷、镜像卷等功能。使用动态存储技术,可以创建、扩充或监视磁盘卷,添加新磁盘,用户无须重启系统,多数配置即可立即生效 分…

TCP/IP 网络模型

应用层最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传给下一层&#xff0c…

V2X,路测单元,RSU,Map消息集

前言 MAPMAP消息即地图消息,由路侧单元RSU(RodeSide Unit)广播,向车辆传递局部区域的地图信息。包括局部区域路口消息、路段消息、车道消息、道路之间的连接关系等。用于传递多种类型的地理道路信息,内容应该包括&…

JS 代理第一篇:在代理中使用反射

理解代理的概念 有过 java 或者 c# 经验的同学,比较容易理解代理的概念和作用,可以类比类中的 setter 和 getter 没有相关经验,读完下面内容,也可以初步理解JS中的代理了 有下面一个对象 const duck {name: Maurice,color: whi…

iOS WeexSDK 如何将 Vue 文件绘制成原生UI

废话开篇:现在的跨平台开发尤其是以 vue 语法为主的 uniapp 框架,可以实现 vue 语法直接转换为原生 UI 组件的功能(.nvue 文件),可以理解成 .nvue 文件下的标签与 weex 库的原生注册的 UI 有对应的映射关系&#xff0c…

String类详解(java)

文章目录📖前言:🎀String类的构造方法两种创建形式🪅**隐式创建:**🪅**显式创建:**🎀String类底层结构:🎀String类常用方法:📖前言&am…

神经网络漫谈(一):科普篇

神经网络漫谈(一):科普篇 发表时间: 2023年1月6日创作地点:湖北省武汉市作者:ixy_com&[Bill Kromydas]封面图片来源:Towards Data Science 1、背景 基本概念:神经网络,也称为人工神经网络 (ANN) 或…

Ubuntu22.04安装Docker以及Docker安装微信、企业微信、Docker常用命令

Ubuntu22.04安装Docker以及Docker安装微信、企业微信、Docker常用命令1 Docker引擎官网安装1.1 访问Docker官网下载社区版引擎并按照官网指导进行初步安装1.2 检查安装是否成功1.3 添加当前用户到docker组,不用每次都输入sudo。2 Docker安装微信2.1 拉取微信镜像2.2…

CSS基础(八)——CSS3新增样式

概述 前面7篇博客记录的所有 CSS 知识,都是 CSS2 版本的功能。 CSS3 在 CSS2 版本的基础上,新增了很多特性,例如边框圆角、动画效果。 在 CSS2 的时代,实现圆角必须要用图片才能实现,而 CSS3 只要一行样式就能实现…