【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

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序