fork进程时资源的深拷贝和浅拷贝

Cursor插件安装CodeX保姆级教程:从登录到调整面板布局,一步不落 本文提供Cursor编辑器安装CodeX插件的详细教程,涵盖从登录到调整面板布局的全流程。通过优化界面布局和配置参数,帮助开发者提升编码效率,特别适合需要智能代码补全的编程场景。 阅读详情

linux (和 unix )将进程的概念说的很大,而且很细,进程不再仅仅拥有一个执行流,而是有了一个容器,其实某种意义上它本身就是一个容器。 unix 传统将进程想成 了一个执行绪,概念真的就是如此简单,简单的东西往往是好的东西,复杂的反而会更加糟糕。进程概念的简单性使得 fork 可以如此美妙如此简单的实现,使得 创建一个可执行映像可以分为 fork 和 exec ,正如我的前文所述。更加重要的是,传统 unix 将执行绪和执行过程中需要的资源分开了,如此就可以将资源 作为一件物品在进程之间传递,这丝毫没有问题。
     linux
继承了 unix 一切好的东西,它的进程由 task_struct 表示,内部有很多表示资源的字段,比如 files_struct 表示打开的文 件, unix 中的 fork 的意义就是进程复制,复制是如此的简单且直观,使得你只需要复制当前的一切就可以了,复制往往比创造要简单得多,就像我们小的时 候总喜欢抄作业一样,后来又有了写时复制,更加节约了时间增加了效率,于是 fork 的意义就是复制一切资源,而对于执行绪内部的资源比如地址空间采取写时 复制的策略。因此,文件描述符作为打开文件的索引其实也是一种资源,这样的话在 fork 的时候就可以传递给子进程了。 linux 就是这样像叉子一样不断的 fork 最终形成一片天地。
     linux
一向以地址空间的隔离作为其安全的根本,但是为何却可以拿资源传来传去呢?地址空间不也是一种资源吗?互相传递资源不会引起不安全吗?当然不会 不安全, linux 的进程结构设计的非常好,资源的共享完全在可控范围内,也就是说你可以选择传递或者不传递,一切由你决定,如果出了问题就是你自己造成 的而不是操作系统造成的。内核当然知道什么东西是可以安全传递的,比如文件描述符,该描述符对应的文件可以被子进程随意读写,而且文件描述符可以不变,对 于地址空间,它是进程的根本,在 fork 的时候是完全复制的(现在是写时复制),其实地址空间和文件描述符都是资源,那为什么内核对待它们的态度却不同 呢?对于文件描述符的复制是浅拷贝而对于地址空间的拷贝却是深拷贝, why ?这就涉及到一个资源性质的问题。我们看一下文件和地址空间作为资源有何不同, 其实很容易就可以看出它们的不同,对于文件是共享资源,它并不是进程的内禀属性,进程可拥有可不拥有,因此它当然可以被共享,而对于地址空间,它是进程的 内禀属性,进程的定义中明确规定地址空间不能和别的进程共享,因此它就必须被进程独享,因此在 fork 的时候要深拷贝。举个例子,丈夫这个定义,它表示此 人拥有一个妻子,妻子就是他的一个资源,而且他也可以拥有一支钢笔,但是对于丈夫而言妻子是他的内禀属性,因此妻子是他独有的,但是钢笔和丈夫并没有必然 关系,因此钢笔是可以让别人用的。

 

AI Agent在智能广告投放中的应用 随着互联网的快速发展,广告投放市场变得越来越复杂和竞争激烈。传统的广告投放方式往往难以精准地触达目标受众,导致广告资源的浪费。AI Agent作为一种智能的自动化程序,能够在复杂的环境中自主学习、决策和执行任务。本文章的目的在于深入探讨AI Agent在智能广告投放中的应用,研究如何利用AI Agent提高广告投放的精准度、效率和效果,降低成本。范围涵盖了AI Agent的基本原理、相关算法、在广告投放中的具体应用场景以及实际案例分析等方面。 阅读详情

相关推荐

影刀rpa的使用一--读取excel表格数据并循环出每一项

1、全部展示2、运行结果展示之后可以按照各自的需求对excel中取出的数据进行处理。

qq_69268437的博客 1万+

fork函数相关资源复制问题验证

fork函数相关资源复制问题验证

443

学术规范与论文写作(雨课堂)研究生 全部答案

1:如何造就优秀的学术论文 论文语法判断题 :全部是错的 2:如何撰写学术论文 3: SCI论文写作经验分享 4:论文写作与投稿技巧 5:学术伦理道德 答案仅供参考,研究生生活不易,大家如果有时间的话,还是可以学习学习的,毕竟老师讲的不错。加油,希望读研的每一个人都能顺利毕业! ...

Always-Learning 13万+

fork()函数详解

目录 1.基本了解: 2.fork函数的了解: 3.僵死进程: 1.基本了解: 一个进程,包括代码、数据和分配给进程的资源。fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。 为什么两个进程的fpid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程...

weixin_57133901的博客 4万+

别再为镜面物体检测发愁了!手把手教你用PMD相位偏折术增强2.5D形状图细节(附Python代码)

本文详细解析了PMD相位偏折术在工业视觉中镜面物体检测的应用,通过2.5D成像方案增强形状图细节。文章提供了Python代码示例,介绍了一种计算高效的局部特征增强算法,帮助解决产线环境中的噪声问题,提升缺陷识别准确率。

weixin_29299807的博客 346

电源管理芯片PMIC

(Power Management Integrated Circuits,简称:将电源电压转换为电子设备各部分所需的适当电压水平,包括升压(Boost)、降压(Buck)和升降压(Buck-Boost)转换。:控制和限制流向电子设备各部分的电流,以保护组件免受过电流损害。:管理多个电源轨,为不同的部分提供稳定的电能控制。电源轨指电路板上传输电力的线路。电源监控:提供过电压、欠电压、过电流、过热和短路保护,以防止电子设备损坏。:通过高效的电源转换技术,减少能量损耗,提高能源利用效率。

qq_42786033的博客 1万+

fork后父子进程共享资源

fork后父子进程共享资源Unix环境高级编程中8.3节中说,“子进程是父进程的副本。例如,子进程获得父进程数据空间、堆和栈的副本。注意,这是子进程所拥有的副本。父进程和子进程并不共享这些存储空间部分。父进程和子进程共享正文段。”书中还预留了例子说明子进程对变量所做的改变并不影响父进程中该变量的值。/** * fork.c * 探讨父子进程共享变量问题 **/#include <stdio.h

teffi的专栏 1万+

物联网开发笔记(34)- 使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

zhusongziye的博客 1万+

Ansible从零到实战:控制端搭建、SSH免密、Playbook编写与避坑指南

在服务器数量增长、重复操作频繁的运维场景中,自动化配置管理已成为提升效率与降低故障率的核心手段。Ansible作为一款无Agent的自动化运维工具,基于SSH协议与YAML编排语言,能够在不侵入被管节点的情况下,批量完成软件安装、配置文件分发、服务启停等日常操作。其幂等性设计和模块化机制,让复杂的基础设施管理变得可重复、可审计。无论是管理几台虚拟机,还是大规模云主机集群,掌握配置管理与任务编排能力都能显著减少人工干预带来的风险。本文从环境搭建、SSH免密配置、inventory主机清单编写出发,结合高频模块

weixin_34357887的博客 250

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

「汽车电子助手」的博客 1440

揭秘大厂 Unity 红点系统设计:别小看右上角那颗小红点,它能把你项目搞崩

本文详细探讨了游戏大厂如何设计高性能红点系统。红点作为提升用户活跃和转化率的重要工具,需要支持多级联动、动态判断和全局一致性。系统采用观察者模式和树形结构,分为数据管理、逻辑判定、订阅通知和UI展示四大模块,通过事件驱动方式实现高效刷新。文章特别强调了解耦设计、配置化管理和性能优化,并提出了热更新、数据分析等高级应用场景。最终指出,优秀的红点系统需要架构标准化、自动化配置和团队紧密协作,是大型游戏项目的关键技术基础。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 377

彻底理解 fork 之写时复制 《一》

彻底理解fork之写时复制&amp;lt;一&amp;gt; 一直以来都对操作系统都比较感兴趣,这篇文章呢就主要研究一下当我们调用fork系统掉用所用到的写时复制技术(copy-on-write)。 下图是fork系列函数的调用过程 &amp;lt;摘自网络 侵删&amp;gt; 写时复制,其实在很多地方都会用到,我们先来看看关于字符串使用写时复制的例子吧。 写时拷贝故名思意:是在写的时候(即改变字符串的时候)才会真正的开辟...

Holy_666的博客 3505

华为OD机试真题 新系统2026-04-08 C语言 实现【直捣黄龙】

小王在玩一款叫做直捣黄龙的小游戏,在该游戏中他需要从入口位置进入敌营,绕过哨兵的层层封锁,达到敌军司令部实施斩首行动。 敌军阵营是一个n*n的矩阵,入口在坐标(0,n/2),敌军司令部在坐标(n-1,n/2),每个哨兵警戒以自己为中心的9宫格,一旦被哨兵发现则行动失败。

MISAYAONE的博客 183

什么是浅拷贝,深拷贝,写时拷贝,引用计数

浅拷贝: 浅拷贝就是当类里面有指针成员时,进行赋值或者拷贝构造的时候,对数据成员逐一赋值,没有为指针成员分配新的内存,使得两个对象的指针成员指向同一块内存,这就是浅拷贝。由于两个对象指针指向了同一块内存,所以当析构的时候会出错。 深拷贝: 深拷贝就是当类里面有指针成员时,进行复制或者拷贝的时候,会给另一个对象的指针成员分配一块新的内存,两个对象的指针成员指向不同的...

weixin_41066529的博客 359

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

复制进程fork与替换进程exec

(1)fork复制进程的过程: 一个现有进程可以用fork()函数通过系统调用创建一个新进程 #include <unistd.h> pid_t fork(void); // 返回:若成功则在子进程中返回0,在父进程中返回子进程PID,若出错则返回-1 fork调用仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子...

ZBQ__的博客 506

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深拷贝与浅拷贝以及写时拷贝

假设B复制了A,当修改A时,看B是否会发生变化。如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝,自食其力。 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用 2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用” 浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对...

qq_38769551的博客 602

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Linux从入门到精通】进程的控制(进程退出+进程等待)

子进程的退出状态信息返回给了操作系统中的进程控制块内,为什么wait和waitpid能够拿到子进程的退出状态呢?wait和waitpid是系统调用接口, 就是操作系统內部的函数!!!当然可以拿到了。设置全局变量行吗?答案是不行的。一旦对全局变量修改,就会发生写时拷贝。同时信号也无法处理。由于内容较多,分为两篇文章来整理。本篇文章主要讲述的是进程的退出和进程等待,下篇文章会讲到进程的替换。

weixin_67596609的博客 1683

Linux 进程管理、fork()函数

初识进程及fork()函数!!!

sdfewtg的博客 325

Lniux系统调用---fork()

系统调用-fork()分三步如下: 用户态(调用fork)到内核态(堆栈转化,寄存器)--->执行系统调用(寻找跳转表,匹配ID,定位fork,执行fork )--->内核态转向用户态,在分析系统调用之前应该先复习一下fork()函数: fork()的作用(请详细阅读《linux内核情景源码分析》第四章P281): fork()是linux系...

海阔天空 579

进程控制—进程创建/等待/终止

进程创建 进程创建被定义为通过复进程创建子进程的过程 进程创建的一般过程 1.给新建的进程分配一个内部的标识符,在内核中分配PCB\ 2.复制父进程的环境\ 3.为父进程分配资源(代码,数据,堆栈)\ 4.父进程地址空间的内容也复制到新的进程空间中 5.将该放到就绪队列 进程的撤销 1.关闭软中断\ 2.回收资源,如关闭其打开的文件...

Ego_Bai的博客 563

深入解析拷贝机制、函数重载与嵌入式通信 ——从内存管理到SPI工作模式,全面掌握核心技术

本文系统讲解了编程基础与嵌入式通信的核心概念,包括深/浅拷贝、函数重载、智能指针、fork陷阱和SPI工作模式。通过对比分析、代码示例和时序图,深入解析了内存管理、多态实现、进程复制和串行通信等关键技术点。重点剖析了浅拷贝的内存风险、函数重载规则、智能指针类型特性、循环fork的进程倍增问题,以及SPI四种工作模式的时序差异,为开发者提供了全面的技术指南和实践建议。

weixin_73497355的博客 1239

进程控制总结

进程的创建、终止、等待、替换。

m0_50655389的博客 1038

【Linux】第六章 进程地址空间(程序在内存中存储+虚拟地址+页表+mm_struct+写实拷贝+解释fork返回值)

🏆​ 🌈⭐️⚡若有帮助可以【关注++】,大家一起进步!

YQ20210216的博客 1396

进程深度认识(创建/等待/终止)

在操作系统里,一个进程在运行过程中可以通过特定的系统调用,放弃当前正在执行的程序,转而执行另一个新的程序。这一操作会替换掉当前进程的整个地址空间内容,包含代码、数据、堆和栈等,但进程的 PID(进程标识符)不会改变,也就是说,从外部看来,还是同一个进程在运行,只不过执行的程序变了。

2302_80166978的博客 1080

进程管理之2:进程三部曲:创建、执行和消亡

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34408624的博客 210
上一篇: CFS调度算法的思想和细节
下一篇: 操作系统内核空间和用户空间的互访问
linuxcode_turing
博客等级 码龄17年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值