【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

相关文章

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

java 进程 返回值

实现 Callable 接口 与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 public class MyCallable implements Callable<Integer> {public Integer call() {return 123;}} public static void main(String[] args

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品