<Linux>进程控制

news/2024/4/29 3:12:43/文章来源:https://blog.csdn.net/weixin_63246064/article/details/126887782

目录

一、进程创建

写实拷贝:

二、进程终止

三、进程等待


一、进程创建

描述一下,fork创建子进程,操作系统都做了什么?

fork后父子进程是全部包括之前的代码都共享;

        

fork创建子进程(内核数据结构(OS创建) + 进程代码和数据(一般从磁盘中来,也就是C/C++程序加载之后的结果));

创建子进程,给子进程分配对应的内核结构,必须是子进程自己独有的,因为进程具有独立性,理论上,子进程也要有自己的代码和数据,可是一般而言,我们没有加载的过程,也就是说,子进程没有自己的代码和数据,所以子进程只能使用父进程的代码和数据那么:

代码:都是不可修改的,只能读取,所以父子共享是没有问题的!

数据:可能被修改的,所以必须分离!

对于数据:

创建子进程时,不需要将不会访问的,或者只会读取的数据都拷贝一份,但是为了保证独立性,还是需要一定数据的拷贝,这里只拷贝将来会被父进程或者子进程写入的数据;但是一般而言,即使是操作系统也无法提前知道那些空间可能会被写入的,而且即使是提前知道了,也不能保证立马就使用拷贝的空间。所以OS选择了写实拷贝技术,来进行父子进程数据的分离。 

写实拷贝:父子进程共用代码,只有在进行数据写入时才重新内存分布;

为什么选择写实拷贝?

1.用的时候在给你分配空间(高效)

2.操作系统无法在代码执行前预知那些空间会被拷贝

1.我们的代码汇编之后,会有很多行的代码,而且每行代码都加载到内存之后,都有对应的地址;

2.因为进程随时可能被中断(可能并没有执行完),下次回来,还必须保证从之前的位置继续运行,就要求CPU必须随时记录下当前进程执行的位置,所以CPU内有对应的寄存器数据,用来记录当前进程的执行位置!

寄存器在CPU内,只有一份,寄存器内的数据,是可以有多份的 !(进程的上下文)

fork创建子进程的时候,虽然父子进程会各自调度,各种会修改EIP(存储进程代码位置的寄存器),但是已经不重要了,因为子进程已经认为自己的ETI起始值是在fork之后的代码了!!所以子进程会从fork之后的代码开始执行;

写实拷贝:

父子进程代码共享,子进程页表拷贝父进程页表,在子进程或者父进程进行写入操作时,页表发生改变,重新分配内存;

因为有写实拷贝技术的存在,所以,父子进程得以彻底分离,完成了进程独立性的技术保证;

写实拷贝是一种延时申请技术,可以提高整机的内存使用率;

二、进程终止

1.进程终止时,操作系统做了什么?

释放进程中申请的相关内核数据结构和对应数据和代码;(本质就是释放系统资源)

2.进程终止的常见方式?

  • a.代码跑完,结果正确 
  • b.代码跑完,结果不正确
  • c.代码没有跑完,程序崩溃了(信号部分,涉及一点点)

main函数返回值的含义是什么?return 0的含义是什么?为什么总是0?

0:退出码;返回上一进程,用来判断进程执行结果的,可以忽略。

命令:echo $? // 获取上一个进程的退出码

程序崩溃了,退出码无意义。一般而言退出码对应的return语句,没有被执行!

3.用代码,如果终止一个进程?

  • main函数内的return语句就是终止进程的,return 退出码;
  • exit(int status)在任何地方调用,都表示终止进程;(库函数
  • _exit(int status)终止进程;(系统接口直接终止进程,不进行清理函数和缓冲区的刷新)

库函数 vs 系统接口

逐渐底层:语言 -> 库函数 -> 系统接口 -> 操作系统

printf - \n 数据是存放在“缓冲区”的,那么这个”缓冲区“在哪里,谁维护的?

一定不在操作系统内部;如果是操作系统维护的,那么_exit(int statut) 就可以刷新缓冲区;"缓冲区"是C标准库维护的;

三、进程等待

  • 子进程退出,父进程不管子进程,子进程就要处于僵尸状态  ---- 导致内存泄漏
  • 父进程创建子进程,是让子进程办事的,那么子进程把任务完成得怎么样?父进程需要关心吗?如果需要,如何得知?如果不需要,该怎么处理?
  • 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息

僵尸状态的进程,即使是kill -9也无法杀死一个已经死去的进程;

如何等待?等待是什么?

wait:回收僵尸进程的问题

参数:wait(int *status)

让父进程来等待子进程退出,并回收

    pid_t ret = wait(NULL);if (ret > 0){printf("等待子进程成功,ret: %d\n", ret);                           }

 

waitpid;获取子进程退出结果的问题

参数:waitpid(pid_t pid, int *status, int option)

  • pid = -1 所有子进程
  • pid > 0 指定的子进程
  • status 获取子进程退出结果(退出码)输出型参数(是按照bit位的方式进行划分的,只使用低16位,高8位表示退出码)
  • option 默认为0 (阻塞态等待)

进程异常退出,或者崩溃,本质是操作系统将这进程杀掉了 (通过发送信号的方式);

status的低7位bit位,表示进程收到的信号!

程序异常,不仅仅是内部代码的问题,也可能是外部杀掉了你的进程;

  • 父进程通过wait/waitpid可以拿到子进程的退出结果,为什么要用wait/waitpid呢?不直接使用全局变量?(不可以,进程具有独立性,写实拷贝)
  • 既然进程具有独立性的,进程的退出码不也是进程的数据码?父进程又怎么拿到的呢?wait/waitpid究竟做了什么呢?

僵尸进程:至少要保留进程的PCB信息,task_struct里面保留了任何进程退出时的结果信息!可知wait/waitpid本质是读取了子进程的PCB结构体中的信息;

  • wait/waitpid有这个权限吗?

 当然有,它是系统调用,操作系统操作! 

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

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

相关文章

【黑马程序员JVM学习笔记】02.内存结构

1.程序计数器 定义: Program Counter Register 程序计数器(寄存器) 作用: 记住下一条jvm指令的执行地址 getstatic #20 // PrintStream out System.out; astore_1 // -- aload_1 // out.print1n(1); i…

Zstack ZCCC学习笔记

ZCCC 云计算基础技术及解决方案 云计算基础概念 云计算交付方式分类 私有云:数据安全性高、IT基础架构可控制能力强、合规;公有云:初期投入成本低、弹性灵活;混合云:安全、合规、弹性、低成本。 服务模式分类 Ia…

文本检测DB net 实践

github 地址:GitHub - MhLiao/DB: A PyTorch implementation of "Real-time Scene Text Detection with Differentiable Binarization". 其他人的解析:DBNet阅读笔记 - 知乎 DB/DBNet:Real-time Scene Text Detection with Diffe…

未归一化导致Dead ReLU的悲剧

问题描述 笔者在参考http://zh.gluon.ai/chapter_deep-learning-basics/mlp-scratch.html 实现多层感知机的时候,遇到了一个问题 那就是,如果使用ReLU作为激活函数,模型的准确率非常低(只有0.1) 但是如果把那个网站上…

机器学习入门四

Octave相关资源官网地址下载地址相关语法运算符变量函数系统命令数据操作数据加载数据保存元素操作元素计算绘图和可视化工具绘图实例常用函数控制语句Octave相关资源 官网地址 官方地址 下载地址 下载地址 相关语法 运算符 %:注释~:表示不等于xo…

自学Python 62 使用urllib 包并获取百度搜索关键词中得到链接

Python 使用urllib 包 文章目录Python 使用urllib 包一、urllib 包介绍二、使用urllib.request模块三、使用urllib.parse模块在计算机网络模型中,Socket套接字编程属于底层网络协议开发的内容。虽然说编写网络程序需要从底层开始构建,但是自行处理相关协…

【图像分类】基于HOG特征结合SVM实现图像分类识别附matlab代码

1 内容介绍 ​为了满足人工智能在目标识别方法中的应用需求,需要具备对海量数据进行智能分类、识别、判读的能力.进一步挖掘了目标特性数据库数据,并将基于HOGSVM的目标识别算法应用于红外目标识别过程中.选择采集到的汽车、直升机、飞机、舰船、无人机等目标,并结合HOG算子与…

【Vite 实践】Vite 库模式能满足你吗?或许你需要统一构建

2022 年本人投入了 Vite 的怀抱,开始参与到 Vite 社区中,陆续开发了一些插件。 Vite 秉承了开箱即用,简化配置的思路,确实显著提升了前端开发体验。 但是在类库模式的构建上却有所欠缺,只能处理单个输入和单输入出的…

个人笔记--数据库理论 01 关系模型介绍——基于《数据库系统概念》第七版

关系模式 关系的例子 关系模型是目前广泛应用的数据模型由表的集合构成 例如 IDnamedpt_namesalary11111JAMCS12345 元组 tuple:表中的一行,元素无所谓属性 attribute : 原子的,不可再分的,要有属性域,如上表的nam…

云原生爱好者周刊:延迟加载任意 OCI 镜像 | 2022-09-13

开源项目推荐 SOCI Snapshotter SOCI Snapshotter 是一个 Containerd Snapshotter 插件,可以延迟加载任意 OCI 镜像,不需要 Stargz Snapshotter 一样构建特殊格式的镜像才能延迟加载。 Authentication Proxy 这个项目使用 YARP (Yet Another Reverse…

Git的认识和使用

目录 一、前置准备 二、git简介 三、gitee.com的基本使用 1.创建仓库(私库和公库) 2.创建文件及文件夹 新建文件夹两种方式 ①​ ② 3.删除 删除文件 删除仓库 四、组长组员的git使用 git clone 查看文件 git status git add git commit git push ## 命令行配置 多个…

葡聚糖-MAL/NHS/N3/Alkyne/SH/Biotin/CHO/OPSS/OH

产品名称: 葡聚糖-马来酰亚胺,葡聚糖-MAL,马来酰亚胺功能化葡聚糖 英文名称:Dextran-MAL PEG分子量可选:350,550,750,1k,2k,3.4k,5k,10k,20k(可…

[仅需1步]企业微信群机器人[0基础接入][java]

[仅需1步]企业微信群机器人[0基础接入][java]背景介绍使用测试项目背景 公司需要把日常的服务器错误抛到企业微信群中,我正好记录下使用企业微信群机器人… 介绍 企业微信群机器人 应用介绍 企业微信是腾讯微信团队打造的企业通讯与办公工具,具有与微信一致的沟…

医院检验LIS系统源码

医院lis源码 实验室信息管理系统源码 .net检验系统源码 医院系统源码 了解更多源码内容,可私信我。 开发环境:.NET4.0 WPF VS2017或VS2019SQL2016 实验室信息管理系统以条码标本为主线,实现从采集、检测、报告、归档的全程跟踪管理。 支持…

DevOps自动化测试的原则和实践

DevOps是为了在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间。在对系统进行变更时,质量很重要。高质量才能让业务价值传递到系统干系人。『自动化测试既是提高质量的一种重要手段,也是实施持续测试必需的能力,因此它是DevOps…

修改WebBrowser控件的内核解决方案

首先说一下原理 当下很大浏览器他们都是用了IE的core, 这个core只提供HTML/JS的执行和渲染,并没有给出关于界面和一些特性上的事,所以开发自己浏览器如果基于IE core需要自己完成这些内容。 一张图很好的说明了这个情况,IE浏览器的架构:http://msdn.microsoft.com/en-us/li…

nginx - 负载均衡配置-负载均衡策略

目录 知识点1:网站流量分析指标 什么是pv? 什么是uv? 什么是IP? 知识点2:正向代理和反向代理 知识点3:负载均衡实验 IP地址规划: 实验拓扑图 知识点4:负载均衡策略 1、请求…

Spring5.3学习——from 官网 day1-1

Spring5.3学习——from 官网day1-1Spring5.3学习——from 官网day1-1前言概述Spring的设计理念Spring核心:IOC什么是IOC解释IOC容器的包什么是BeanBeanFactory接口简述ApplicationContext接口简述BeanFactory源码描述以下是Bean工厂创建和销毁bean的完整生命周期流程…

Matlab论文插图绘制模板第48期—平行坐标图(Parallelplot)

​上一期文章中,分享了Matlab帕累托图的绘制模板: 这一次,再来分享一种特殊的线图:平行坐标图。 ‘平行坐标图是一种通常的可视化方法,用于对高维几何和多元数据的可视化……为了克服传统的笛卡尔直角坐标系容易耗尽空…

好心情精神心理科:80%双相情感障碍被误诊,千万注意鉴别

双相情感障碍又称躁郁症,其表现复杂,容易与其他精神疾病(包括边缘型人格障碍)相混淆,超过80%的患者未能得到正确诊断。 具体如何区分双相情感障碍与边缘型人格障碍?在回答这个问题之前,好心情精…