进程创建fork进程终止

文章目录

  • 进程创建
    • fork函数
    • fork函数返回值
    • 写时拷贝
    • 子进程功能
    • fork调度失败的原因
  • 进程终止
    • 进程终止的概念
    • 进程终止的情况
      • 退出码&&退出信号
    • 进程退出方法
    • exit与_exit的区别

进程创建

进程:内核数据结构(task_struct ,mm_struct ,页表…)+代码和数据

每一个进程在内核都有一个对应的test_struct结构体,包含了进程的所有信息,(如:进程ID(PID)、父进程ID(PPID)、进程状态、进程地址空间、打开的文件描述符等等。) 也称PCB(进程控制块)。

mm_struct是Linux内核用来描述进程虚拟地址空间的结构体。

页表:用于实现虚拟内存到物理内存映射的数据结构。

fork函数

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。

进程调用fork,当控制转移到内核中的fork代码后,内核做:

1.分配新的内存块和内核数据结构给子进程
2.将父进程部分数据结构内容拷贝至子进程
3.添加子进程到系统进程列表当中(PCB移动到调度队列)
4.fork返回,开始调度器调度

在这里插入图片描述
当一个进程调用fork之后,就有两个二进制代码相同的进程。
子进程和父进程是相互独立的,他们有各自的内核数据结构,共享代码,子进程写时拷贝父进程的数据,当子进程要执行一个全新的程序时(进程的程序替换),代码也会进行写时拷贝。

int main( void )
{pid_t pid;printf("Before: pid is %d\n", getpid());
if ( (pid=fork()) == -1 )perror("fork()"),exit(1);printf("After:pid is %d, fork return %d\n", getpid(), pid);sleep(1);return 0;
}

在这里插入图片描述
我们能看到有三行输出,一行before,两行after。
进程43677没有before输出。所以我们能推断:fork前父进程独立执行,fork后,父子进程分别执行。

fork函数返回值

子进程返回0
父进程返回子进程的pid

为什么父进程的返回值是子进程的pid呢?
为了方便父进程对子进程进行标识,进而管理。

写时拷贝

通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。

在这里插入图片描述
当进行只读操作时,父子进程的页表内容一样,指向的物理地址空间也一样,当要进行写操作时,发生写时拷贝,复制当前物理空间的值,开新空间,并指向新空间。

子进程功能

1.做和父进程相同的事
2.执行不同的程序(程序替换)

fork调度失败的原因

1.系统中有太多的进程
2.实际用户的进程数超过了限制

进程终止

进程终止的概念

进程=内核数据结构+代码和数据
创建进程时,先创建内核数据结构再创建它的代码和数据

进程终止:
1.释放代码和数据所占空间
2.释放内核数据结构

进程终止的情况

1.代码跑完,结果正确
2.代码跑完,结果不正确
3.代码执行时出现异常,提前退出了

退出码&&退出信号

子进程退出后,父进程要知道子进程的退出结果,所以子进程要给父进程传一个退出码。0表示退出成功,非0表示退出失败。退出码可以自己定义或是使用系统自带的退出码。

代码执行时,编译崩溃了,操作系统会杀死进程,从而出现异常,一旦出现异常,退出码就没有意义了。
出现异常的本质:进程收到了OS发给进程的信号。

所以衡量一个进程的退出,只需知道退出码+退出信号。

子进程退出时,代码和数据都被释放掉了,但子进程的PCB会保留一段时间(变成Z状态),退出时,退出码(exit_code)和退出信号(exit_signal)写入PCB中,方便父进程查看。

进程退出方法

正常终止:
1.main函数中直接return
2.代码任意位置调用exit
3._exit()

异常退出:
ctrl+c ,信号终止

exit与_exit的区别

exit()会先刷新缓冲区,再调用_exit(),这使得exit函数在结束进程时能够确保数据的完整性和资源的正确释放。
_exit则是立即进入内核,释放进程所占用的资源并关闭所有打开的文件描述符,直接终止进程。

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

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

相关文章

基于Spring Boot+Vue的在线拍卖系统

随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、…

页面转word的那些事

背景 有些时候需要将页面内容或者是页面的数据通过word进行下载,以方便客户进行二次编辑,而不是直接导出图片或者是pdf。 想在页面端点击下载成word,那必然需要服务端来进行读写文件,无论是你后端编辑好的内容流,还是…

第十四篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化处理图像

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python自动化图像处理的优点介绍二、Python常用图像处理库和功能介绍三、强大且易于上手示例代码四、丰富的算法资源示例代码五、批量处理图片示例代码六、支持多种图像格式示例代码七、…

智慧粮仓监测系统解决方案

一、概述 粮食储备是每个国家战略物资中最为重要的一项储备;而随着现代化农业的快速发展以及国家经济发展的需要,我国粮食产量和储备量长期处于世界前列。传统的粮仓由于修建年代久远,可能存在着设施落后,实时监控不到位的现象&am…

python-study-day1

ps:前言 可做毕设,html,web,app,小程序,bug修改,可加急 作者自述 作为一名前端开发工程师,这个大环境不好的情况下,我试过我前端接单子但是没有后端&#xff0c…

物理随机接入信道PRACH数据生成

NR随机接入前导码(Preamble)采用Zadoff Chu序列,长度分别为839和139。 物理随机接入信道(PRACH)前导码格式的定义包括PRACH OFDM符号个数、循环前缀(CP)长度和保护时间(GT&#xff…

0 idea搭建springboot项目

1 2 3 4 5 配置文件 application.yaml server:servlet:context-path: /app #项目名controller //注入到spring容器 Controller public class HelloController {GetMapping("hello")ResponseBodypublic String hello(){return "Hello,SpringBoot";} }启…

WinRAR再爆0 day漏洞,0 day漏洞该如何有效预防

WinRAR再爆0 day漏洞,已被利用超过4个月。 Winrar是一款免费的主流压缩文件解压软件,支持绝大部分压缩文件格式的解压,全球用户量超过5亿。Group-IB研究人员在分析DarkMe恶意软件时发现WinRAR在处理ZIP文件格式时的一个漏洞,漏洞…

虚拟网络设备的真正使命:实现有控制的通信

在数字化时代📲,网络安全🔒成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁🔥,传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备🖧,作为网络架构中…

从挑战到机遇:HubSpot如何帮助企业化解出海过程中的难题

企业出海挑战与对策 随着全球化的加速推进,越来越多的企业开始将目光投向海外市场,以寻求更广阔的发展空间。然而,在出海的过程中,企业往往面临着诸多挑战,其中文化差异、法律限制等问题尤为突出。今天运营坛将对这些…

LeetCode 题目:两个总和

LeetCode 题目:两个总和 描述: 编写一个函数,输入为一个整数数组nums和一个目标整数target,要求找到数组中两个数的和等于target,并返回这两个数的索引。 函数定义: def two_sum(nums: List[int], targe…

宏集PLC如何为楼宇自动化行业提供空调、供暖与通风的解决方案?

一、应用背景 楼宇自动化行业是通过将先进的技术和系统应用于建筑物中,以提高其运营效率、舒适度和能源利用效率的行业,其目标是使建筑物能够自动监控、调节和控制各种设备和系统,包括照明系统、空调系统、安全系统、通风系统、电力供应系统…

ML.NET(二) 使用机器学习预测表情分析

这个例子使用模型进行表情分析: 准备数据: happy,sad 等; using Common; using ConsoleApp2; using Microsoft.ML; using Microsoft.ML.Data; using System.Diagnostics; using static Microsoft.ML.Transforms.ValueToKeyMappingEstimator;…

分布式 SpringCloudAlibaba、Feign与RabbitMQ实现MySQL到ES数据同步

文章目录 ⛄引言一、思路分析⛅实现方式⚡框架选择 二、实现数据同步⌚需求分析⏰搭建环境⚡核心源码 三、测试四、源码获取⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助…

高中数学:三角函数的定义

一、定义 二、常用三角函数值 三、题型 1、利用定义求值 例题 2、利用定义求范围 例题

蓝桥杯物联网竞赛_STM32L071KBU6_我的全部省赛及历年模拟赛源码

我写的省赛及历年模拟赛代码 链接:https://pan.baidu.com/s/1A0N_VUl2YfrTX96g3E8TfQ?pwd9k6o 提取码:9k6o

大模型训练:如何解决GPU万卡互联挑战?

如何解决GPU万卡互联的挑战 近日,字节跳动携手北京大学研究团队发布重磅论文,揭示了一项革命性技术:将大型语言模型训练扩展至超10,000块GPU的生产系统。此系统不仅解决了万卡集群训练大模型时的效率和稳定性难题,更标志着人工智能…

Linux内核中常用的C语言技巧

Linux内核采用的是GCC编译器,GCC编译器除了支持ANSI C,还支持GNU C。在Linux内核中,许多地方都使用了GNU C语言的扩展特性,如typeof、__attribute__、__aligned、__builtin_等,这些都是GNU C语言的特性。 typeof 下面…

分类模型决策边界、过拟合、评价指标、PR、ROC曲线

文章目录 1、线性逻辑回归决策边界1.2、使用自定义函数绘制决策边界1.3、三分类的决策边界1.4、多项式逻辑回归决策边界 2、过拟合和欠拟合2.2、欠拟合2.3、过拟合 3、学习曲线4、交叉验证5、泛化能力6、混淆矩阵7、PR曲线和ROC曲线 x2可以用x1来表示 1、线性逻辑回归决策边界 …