【lesson14】进程控制之进程终止

news2024/10/3 10:37:34

文章目录

  • 进程创建结尾
    • 写时拷贝
  • 进程终止
    • 进程终止时操作系统做了什么?
    • 进程终止常见的方式
    • 用代码如何终止一个进程?

进程创建结尾

写时拷贝

上个博客在进程创建的时候我们提到了写时拷贝技术,那么到底什么是写时拷贝技术。

==通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。==具体见下图:
在这里插入图片描述
因为有写时拷贝技术的存在,所以父子进程得以彻底分离,完成了进程独立性的保证。
写时拷贝是一种延时申请技术,可以提高整机内存使用率。

进程终止

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

进程终止时OS释放进程申请的相关内核数据结构和对应的数据和代码。
本质是释放系统资源。

进程终止常见的方式

常见方式:
1.代码跑完,结果正确
2.代码跑完,结果不正确
3.代码没跑完,程序崩溃

例子:
在这里插入图片描述
我们知道main函数有返回值return 0,那么main函数返回值的意义是什么?一定是0吗?
在这里插入图片描述
返回值的意义:返回给上一级进程,用来评判该进程执行结果用的。可以忽略

main函数返回值不一定是0:
0:success
非0:标识运行结果不正确

代码演示:
在这里插入图片描述
在这里插入图片描述
我们可以看到运行结果不正确因为最后返回值ret是1,代码中我们temp少加了一个数所以结果会不正确。

那么main函数返回值一共有多少个呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面我们可以知道,非0值有许多个,不同的非0值就可以标识不同的错误原因
有了返回值在我们的程序在运行结束之后,如果结果不正确可以方便定位错误的原因细节!

程序崩溃的时候,退出码无意义!一般而言退出码对应的return语句,没有被执行。
在这里插入图片描述
在这里插入图片描述

用代码如何终止一个进程?

1.return语句就是终止进程,当然在main函数中的return语句才有用。
2.exit函数,exit函数不管在哪个函数中都是直接终止掉进程。
演示:
在这里插入图片描述
在这里插入图片描述
3._exit函数,作用和exit一样
演示:
在这里插入图片描述
在这里插入图片描述
4.exit函数和_exit函数的区别
exit函数是C标准库提供的一个函数
_exit函数是系统接口,属于系统调用

使用上的区别:
exit:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到当用exit函数时,先停顿3秒然后输出hello world。
_exit:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面可以看到,_exit最后什么都没有输出。这是为什么呢?
因为_exit是系统调用,而exit是C标准库提供的。
我们知道printf的数据是保存在“缓冲区”中的,请问这个“缓冲区”在哪里指的是什么缓冲区?谁维护?
从上面函数调用我们可以得知,一定不再操作系统内部!因为如果是OS维护的,缓冲区_exit也能刷出来。

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

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

相关文章

(汇总)系统设计 - 我们如何通俗的理解那些技术的运行原理 - 汇总篇

本心、输入输出、结果 文章目录 (汇总)系统设计 - 我们如何通俗的理解那些技术的运行原理 - 汇总篇前言分目录相关技术清单相关资料弘扬爱国精神 (汇总)系统设计 - 我们如何通俗的理解那些技术的运行原理 - 汇总篇 编辑&#xff1…

mount: /dev/sr0 is write-protected, mounting read-only

报错 原因 只有只读权限,没有写权限 解决 在终端中执行以下命令。 id user_name将 user_name 替换为您的用户名以获取您的 uid 然后执行此命令 sudo mount -o rw,uidyour_uid_here /dev/cdrom /mnt将 your_uid 替换为上面找到的用户的 uid。

Python 中的方法重载

本篇文章将通过示例介绍Python中的方法重载及其优点。 Python 中的方法重载 方法重载在 Python 中起着至关重要的作用。 方法有时采用零个参数,有时采用一个或多个参数。 当我们以不同的方式调用同一个方法时,称为方法重载。 Python 并不像其他语言一样…

数字电路与逻辑设计 之 组合逻辑电路

文章目录 组合电路的分析过程组合电路的设计过程电路竞争冒险编码器编码器的应用 组合电路的分析过程 在上面的例子中是 奇校验 功能,怎么改可以变成偶 校验呢 如果是增加一个异或门可以实现吗,答案是不可以,四个异或门也是实现奇校验功能&am…

十八、字符串(3)

本章概要 正则表达式 基础创建正则表达式量词CharSequencePattern 和 Matcherfinde()组(Groups)start() 和 end()Pattern 标记split()替换操作reset()正则表达式与 Java I/0 正则表达式 很久之前,_正则表达式_就已经整合到标准 Unix 工具…

Linux_虚拟内存机制

虚拟内存是如何工作的 我们的程序中使用的所有地址都是虚拟地址,但实际数据是从磁盘空间缓存在物理内存中,读的还是内存中的数据,所以每次CPU的访存操作都会先将虚拟内存交给CPU中的MMU硬件,利用存在主存(实际也可能在…

Towards a Rigorous Evaluation of Time-series Anomaly Detection(论文翻译)

1 Introduction 随着工业4.0加速系统自动化,系统故障的后果可能会产生重大的社会影响(Baheti和Gill 2011; Lee 2008; Lee,Bagheri和Kao 2015)。为了防止这种故障,检测系统的异常状态比以往任何时候都更加重要&#xff…

python+unittest+requests+HTMLRunner编写接口自动化测试集

问题描述: 搭建接口测试框架,执行用例请求多个不同请求方式的接口 实现步骤: ① 创建配置文件config.ini,写入部分公用参数,如接口的基本url、测试报告文件路径、测试数据文件路径等配置项 1 [DATABASE] 2 data_addre…

QT:编译opencv4.5.3

软件版本 QT:5.9.11 OpenCV 4.5.3 mingw 530(32位) cmake 3.15.3 下载地址: opencv下载:https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/ cmake下载:https://cmake.org/files/ qt下…

多变量GARCH模型R代码实现

大家好,我是带我去滑雪! 多变量GARCH(Generalized Autoregressive Conditional Heteroskedasticity)模型是一种用于建模多个时间序列变量之间的条件异方差性(conditional heteroskedasticity)的统计模型。它…

Unity开发之观察者模式(事件中心)

观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主体是通知的发布者,它发出通知时并不需要知道谁是它的观察者&#…

随机森林算法(Random Forest)的二分类问题

二分类问题 1. 数据导入2. RF模型构建2.1 调参:mtry和ntree2.2 运行模型 3. 模型测试4.绘制混淆矩阵5.绘制ROC曲线6. 参考 1. 数据导入 library(dplyr) #数据处理使用 library(data.table) #数据读取使用 library(randomForest) #RF模型使用 library(caret) # 调参…

软件测试之 测试用例 如何设计

在软件开发过程中,测试是一个至关重要的环节,它有助于确保软件的质量和稳定性。而测试用例设计则是测试过程中的一个关键步骤,它帮助测试团队确定如何测试软件以发现潜在的问题和缺陷。本文将介绍测试用例设计的基本概念和步骤,以…

产品研发团队协作神器!10款提效工具大盘点!

在如今科技驱动的时代,产品研发团队面临着前所未有的竞争压力和不断变化的市场需求。为了在这个激烈的环境中脱颖而出,团队需要高效协作并充分利用先进的工具来提高生产力和创新能力。 本文将为你盘点产品研发团队协作必备的10个提效工具,这…

TiDB、MySQL与Oracle的char字段

文章目录 MySQLTiDBOracle结论 我们组在团队内维护了一套TiDB,有时候会有其他同事来请教一些问题,当然遇到比较复杂的问题,我也会直接抛给DBA。今天有个同事来问了一下TiDB的char字段查询是否需要补空格。在我的印象中,TiDB是高度…

【Docker】Docker学习之一:离线安装Docker步骤

前言:基于Ubuntu Jammy 22.04 (LTS)版本安装和测试 1、Docker安装 1.1、离线安装 步骤一:官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz步骤二:解压安装包; tar -zxvf docker…

安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法

安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也…

C++进阶语法之函数和指针【学习笔记(三)】

文章目录 1、C 函数1.1 函数的定义1.2 函数原型(function prototypes)1.3 参数(parameter)——值传递(pass by value)1.4 重载(overloading)1.5 函数传参——传递数组(ar…

Linux下控制GPIO的三种方法

https://blog.csdn.net/qq_41076734/article/details/124669908 1. 应用空间控制gpio 1.1简介 在/sys/class/gpio/下有个export文件,向export文件写入要操作的GPIO号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括dir…

Flink学习笔记(四):Flink 四大基石之 Window 和 Time

文章目录 1、 概述2、 Flink 的 Window 和 Time2.1、Window API2.1.1、WindowAssigner2.1.2、Trigger2.1.3、Evictor 2.2、窗口类型2.2.1、Tumbling Windows2.2.2、Sliding Windows2.2.3、Session Windows2.2.4、Global Windows 2.3、Time 时间语义2.4、乱序和延迟数据处理2.5、…