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

2023-10-24 19:45
文章标签 进程 控制 终止 lesson14

本文主要是介绍【lesson14】进程控制之进程终止,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

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

进程创建结尾

写时拷贝

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

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

进程终止

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

进程终止时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也能刷出来。

这篇关于【lesson14】进程控制之进程终止的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277374

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us