Linux内核是如何创建进程?

news2025/2/22 2:30:07

目录

1.Linux如何创建进程

2.fork函数原理

2.1 fork函数原型

2.2 fork函数实现原理

2.3 父子进程虚拟地址空间(mm_struct)之间的关系

2.4 写时拷贝(copy-on-write)技术

2.5 父子进程如何共享文件(files_struct)

3.vfork函数原理

3.1 vfork函数原型

3.2 vfork和fork函数区别?


1.Linux如何创建进程

Linux创建进程都是通过父进程克隆的方式实现。

  • 子进程刚创建成功时,虚拟地址空间和父进程虚拟地址空间信息一样(即代码和数据都是一样)。

  • 通过调用exec家族函数可以替换虚拟地址空间信息为新的程序的信息。

图片

2.fork函数原理

2.1 fork函数原型

pid_t fork(void);

功能:创建一个新的进程。

参数:

无。

返回值:

fork函数调用一次返回两次。

  • 父进程:返回子进程PID。

  • 子进程:返回0。

  • 失败:返回-1。

2.2 fork函数实现原理

图片

2.3 父子进程虚拟地址空间(mm_struct)之间的关系

  • 父子进程各自拥有自己独立的虚拟地址空间。

  • 父子进程共享代码段(只读)。

  • 采用写时拷贝(copy-on-write)技术创建子进程虚拟地址空间。

2.4 写时拷贝(copy-on-write)技术

传统fork函数缺点:

  1. 复制子进程虚拟地址空间时,存在大量拷贝,效率很低。

  2. 子进程立马需要执行execv函数替换虚拟地址空间内容,导致上一步复制子进程虚拟地址空间变得多余。

什么是写时拷贝?

写时拷贝是指父进程在创建子进程时,只创建虚拟地址空间,不为子进程分配实际的内存,父进程和子进程之间共享相同的物理内存页面。

当父进程或者子进程对虚拟地址空间对应的内存进行修改时才会分配实际内存。

写时拷贝技术优点:

  • 节省内存开销。

  • 提高创建进程效率。

拷贝前

图片

拷贝后

图片

2.5 父子进程如何共享文件(files_struct)

图片

FD_CLOSEXEC文件标志?

子进程和父进程共享文件是一种不安全的行为,如果子进程调用exec家族函数,子进程的虚拟机制空间被新的程序替换,如果子进程还保留父进程的文件描述符表,后果很严重。

文件设置FD_CLOSEXEC文件标志后,子进程调用exec家族函数,该文件会被关闭。

如何设置FD_CLOSEXEC文件标志?

  • 方法1:open函数带上O_CLOSEXEC标志。

如:open(“file”,  O_RDWR  | O_CREAT  | O_TRUNC | O_CLOSEXEC, 0644 );

  • 方法2:fcntl函数F_SETFD操作设置。

3.vfork函数原理

3.1 vfork函数原型

pid_t vfork(void);

功能:fork函数创建一个新的子进程,该子进程与父进程共享相同的地址空间。

参数:

无。

返回值:

vfork函数调用一次返回两次。

  • 父进程:返回子进程PID。

  • 子进程:返回0。

  • 失败:返回-1。

3.2 vfork和fork函数区别?

  • vfork函数创建子进程和父进程共享地址空间。

  • 使用vfork函数创建的子进程则会暂停父进程的执行,直到子进程调用exec()或者_exit()函数退出或替换自己的地址空间。

不推荐使用vfork函数!!!

vfork函数由于子进程和父进程共享地址空间,vfork比传统fork函数效率高。随着写时复制技术出现,这个优势已经不存在了。

vfork存在不安全的行为,所以不推荐使用vfork函数。

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

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

相关文章

四十三、【进阶】前缀索引

1、基础 简单点说,前缀索引就是当索引字段类型较大时,有时候需要索引很长的字符串,查询时,会浪费更大的空间,此时可以只对该索引的一部分前缀建立索引,可以大大的节省空间。 前缀索引一般配合选择度进行使用…

多测师肖sir_高级金牌讲师_性能指标

性能指标 一、性能测试指标 性能测试是通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。 目的:验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。 二、指标分为两大类: 软件…

ZKP9 SNARKs based on Linear PCP (Pinocchio Groth16)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 9: SNARKs based on Linear PCP (Yupeng Zhang) SNARKs learned so far Earliest Implemented SNARKs Pros Shortest proof size (3 elements [Groth16])Fast verifier (bilinear pairing) Cons FFT and group exponentiatio…

西门子PLC ModbusTcp通信访问网关后从站(SCL语言轮询状态机FB)

西门子PLC的ModbusTcp通信在专栏已有系列文章介绍,所不同的是每个项目的通信需求都略有不同,今天我们以访问网关后的三个从站数据来举例,给出轮询的推荐写法,这里我们利用SCL语音进行编程,方便大家导入导出到自己的项目里使用,相关文章链接大家可以参考下面地址: SMART…

飞致云及其旗下1Panel项目进入2023年第三季度最具成长性开源初创榜单

2023年10月26日,知名风险投资机构Runa Capital发布2023年第三季度ROSS指数(Runa Open Source Startup Index)。ROSS指数按季度汇总并公布在代码托管平台GitHub上年化增长率(AGR)排名前二十位的开源初创公司和开源项目。…

CS224W4.4——矩阵分解和节点Embeddings

我们稍微切换一下方向,讨论生成节点嵌入的矩阵分解方法。具体来说,我们讨论了前面提到的学习节点嵌入的方法如何与矩阵分解的方法联系起来。基于这些直觉,我们提出了基于矩阵分解和随机游走的嵌入方法的3个局限性。在接下来,我们将…

基于51单片机霍尔测速直流电机控制设计

**单片机设计介绍,1658【毕设课设】基于51单片机霍尔测速直流电机控制设计(含源码、原理图、论文、PCB封装) 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 51单片机是微型计算机的一种常见类型,用于处理数…

GB28181协议如何注册

前言 GB28181协议是视频监控领域的国家标准,本文将解析如何在FFmpeg中增加对GB28181协议的支持,使其可以与支持GB28181协议的设备进行通信与控制,实现设备的注册、保活以及流媒体的传输。 1.背景介绍 GB28181协议指的是国家标准GB/T 28181…

S/4 HANA 中的 Email Template

1 如何创建Email Template? 没有特定的事务用于创建电子邮件模板,我们可以将其创建为 SE80 事务中的存储库对象,如下所示: 1,选择包(或本地对象)并右键单击。 2,选择“创建”->“更多”->“电子邮件模板” 尽管如此,对于已有的Email Template,可以使用程序…

音视频开发:音频编码原理+采集+编码实战

原理: 消除冗余信息,压缩量最大,也叫有损压缩 剔除人耳听觉范围外的音频信号20Hz以下和20000Hz以上;去除被掩蔽的音频信号,信号的遮蔽可以分为频域遮蔽和时域遮蔽;频域遮蔽效应 屏蔽70分贝以下&#xff0…

【QT】仿函数

函数调用运算符 () 也可以重载由于重载后使用的方式非常像函数的调用&#xff0c;因此称为仿函数仿函数没有固定写法&#xff0c;非常灵活 示例&#xff1a; #include <iostream> #include <string> using namespace std;class MyPrint { public://重载的运算符是…

MFC网络编程-Udp客户端

目录 1、UI的设计&#xff1a; 2、代码的实现&#xff1a; &#xff08;1&#xff09;、重写CSocket虚函数OnReceive&#xff0c;并且传入对话框的指针 &#xff08;2&#xff09;、初始化SOCKET &#xff08;3&#xff09;、绑定本地IP和端口 &#xff08;4&#xff09;、…

Microsoft SQL Server 缓冲区错误漏洞(CVE-2018-8273)解决方法

前言&#xff1a; 在一次漏洞扫描中&#xff0c;扫描出紧急漏洞Microsoft SQL Server 缓冲区错误漏洞(CVE-2018-8273) 根据修复建议找补丁。 一、漏洞详情 二、寻找补丁 根据漏洞修复建议去下载补丁 目前厂商已发布升级补丁以修复漏洞&#xff0c;补丁获取链接&#xff1a;h…

龙迅视频转换IC LT6711GX适用于HDMI2.1转TPYE-C/DP1.4/EDP功能应用

1.描述 应用功能&#xff1a;LT6711GX适用于HDMI2.1转TPYE-C/DP1.4/EDP 分辨率&#xff1a;最高支持8K30HZ或8K60Hz压缩数据 工作温度范围&#xff1a;−40C to 85C 产品封装&#xff1a;QFN88 &#xff08;10*10&#xff09; 最小包装量&#xff1a;1680PCS 2.产品应用市场 •…

【JMeter】线程组分类以及功能介绍

1.概念介绍 进程&#xff1a; 正在运行的程序&#xff0c;比如Jmeter 线程组&#xff1a;进程中有多个线程 2线程组分类 JMeter自带的线程组&#xff1a; 普通线程组&#xff08;Thread Group&#xff09;开始线程组&#xff08;setUp Thread Group&#xff09;结束线程…

绝对好用!一个浏览器插件解决跨设备同步问题,吊打文件传输助手!

在数字化的时代&#xff0c;我们所接触的信息呈现指数级的增长。无论是办公资料、学习资源&#xff0c;还是各种生活中的点滴&#xff0c;所有这些信息以各种形式——文本、图片、视频、音乐等——出现在我们面前&#xff0c;如何有效地同步和管理这些内容成为一个挑战。 就跨…

PhotoFoundry for Mac:图片滤镜编辑软件的终极进化!

如果你是一个摄影师&#xff0c;或者是一个热衷于使用图片编辑软件的人&#xff0c;那么PhotoFoundry for Mac将会是你的新最佳伙伴&#xff01;这款软件不仅具备了强大的图片滤镜编辑功能&#xff0c;更在操作简易度、用户体验以及创意控制方面做到了极致。 PhotoFoundry for…

大华智慧园区综合管理平台文件上传漏洞(CVE-2023-3836)

大华智慧园区综合管理平台文件上传漏洞 漏洞描述漏洞危害Fofa检索漏洞复现1. 构造poc2. 复现3. 访问shell地址 漏洞描述 大华智慧园区综合管理平台是一个基于智能物联技术的园区安防、办公、运营的数字化解决方案。 大华智慧园区综合管理平台(截至 20230713)版本中存在文件上传…

vim三种模式,文本操作(操作字符/光标,列出行号可视化块模式/多文件查看)

目录 vim--文本编辑器 功能 基本概念 命令/默认模式 插入模式 底行模式 文本操作 引入 移动光标位置 删除字符 -- x/dd 复制/粘贴字符 -- yw/yyp 替换文本 -- r / %s 底行模式 全局替换 -- /g 撤销操作 -- u / ctrlr 修改字符 -- cw 示例 跳行 -- ctrlg 底行…

uniapp原生插件之无预览静默拍照

插件介绍 无预览静默拍照&#xff0c;在用户无感觉情况下调用摄像头拍照 插件地址 无预览静默拍照 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 插件申请权限 存储卡读写权限摄像头权限 manifest.json权限列表 /* android打包配置 */"android" : {…