16 进程终止

news2024/10/26 2:25:21

终止的结果

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

终止的场景

  1. 代码跑完,结果正确
  2. 代码跑完,结果不正确
  3. 代码没有跑完,程序崩溃

进程常见退出方法

正常退出:
1.main返回
2.eixt
3._exit

异常退出:
crtl+c,信号终止

main函数返回的意义

以前我们main函数里都会写一个返回0,作为main函数的返回值。其实,main函数的返回值是返回给上一级进程,用来评判该进程执行结果用的,因此,main函数的返回值不一定是0,随便运行一个代码,写上返回0试试

 1 test: test.c
  2     gcc -o $@ $^
  3 .PHONY:clean 
  4 clean:
  5     rm -f test

makefile里$@表示编译所有.c的文件

如何查看返回值

可以通过

echo $?

来获取最近的一次返回值

在这里插入图片描述
返回0,将return的值改为10再看看
在这里插入图片描述
改为10后,返回值就是10

返回值0表示程序正常终止,结果正确。非0值表示结果不正确

非零返回的意义

非零值有无数个,不同的非零值可以表示不同的错误原因,可以方便定位错误的原因。那具体每个返回值代表什么,可以通过strerror来解析

在这里插入图片描述
可以用一个for循环打印前150个错误信息

 for(;i<150;i++)
  7     {
  8         printf("%s\n", strerror(i));                                                          
  9     }   

在这里插入图片描述

打印到了133个就没有了,上面的就是常见错误。0表示成功运行,其他每一个都有表示的意义

我们用ls命令,随便传入一段参数看看返回值
在这里插入图片描述
这正好对应了上面的错误码和信息,ls命令将错误码的结果解析了出来,显示给了用户

知道了错误码可以表示错误信息,那我们自己也可以定义一个返回值来标识自己的程序运行出错的结果和原因

6     int i = 0;
  7     int sum = i + 50;
  8     if (sum != 50)
  9     {
 10         printf("计算错误\n");
 11         return 1;
 12     }  

如果计算错误就返回1

exit函数

exit可以在任何地方调用退出程序,也可以传出返回值

#include <unistd.h>
void exit(int status);

在这里插入图片描述
在代码中用exit函数,参数填入数字试试

    1 #include <stdio.h>   
    2 #include <string.h>
    3 
    4 void fun()
    5 {
    6     exit(222);
    7 }
    8 int main()
W>  9 {
   10     int i = 0;
   11     fun();                                                                                  
   12   // for(;i<150;i++) 
   13   // { 
   14   //     printf("%s\n", strerror(i));             
   15   // }                                            
   16     return 10;                                    
   17 } 

在这里插入图片描述

返回值是exit函数的222,不是return的结果,exit后,程序已经终止了
exit可以在任何位置传出返回值,return只能在main函数传出返回值

_exit

和exit不同的是,_exit是系统调用,exit是库函数

#include <unistd.h>
void _exit(int status);
参数:status 定义了进程的终止状态,父进程通过wait获取该值

在这里插入图片描述
将fun函数的内容修改一下

5 void fun()
    6 {
    7     printf("你好吗");                                                                       
    8     exit(222);
    9 }  

在这里插入图片描述

将exit换位_exit函数
在这里插入图片描述
这时什么都没有输出

exit函数做了什么

1.执行用户通过atexit或on_exit定义的清理函数
2.关闭所有打开的流,所有的缓存数据均被写入
3.调用_exit

exit函数内部调用了_exit,所以,_exit是系统调用,exit是对它的封装。_exit并不会刷新缓冲区数据

在这里插入图片描述

在这里插入图片描述
那么缓冲区是谁维护的

缓冲区是库函数维护的,如果是系统的,那系统调用_exit应该也会刷新缓冲区,但事实不能。所以是c标准库给我们维护的

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

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

相关文章

selenium-java web自动化测试工具抓取百度搜索结果实例

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

高中数学:函数类高阶题目考法汇总(较难)

1、基本性质类问题 2、解抽象函数不等式问题 在1的基础上 解题思路&#xff1a; 根据f的单调性&#xff0c;去f 将问题转化成具体不等式问题。 例题&#xff1a; 对于第三小问&#xff0c;每一个变形前面&#xff0c;都要加上只要证、即证关键词&#xff0c;才不会被扣过程…

【STM32+HAL】姿态传感器陀螺仪MPU6050模块

一、准备工作 有关OLED屏初始化的问题&#xff0c;详见【STM32HAL】OLED显示初始化配置 二、所用工具 1、芯片&#xff1a;STM32F10C8T6 2、CUBEMX配置软件 3、 6 轴运动处理组件MPU6050 三、实现功能 OLED屏显示姿态角 四、HAL配置步骤 1、开启I2C1进行MPU6050通信 2、开…

红队攻击手“实战”特训

伴随着新的一年的到来&#xff0c;我们最新一期的红队攻防&#xff0c;也如约而至~ 每一期我们都会做二次学员反馈&#xff0c;根据同学们的真实反馈和需求&#xff0c;来调整讲师及授课内容 新的一期我们增加了C基础&#xff0c;python基础&#xff0c;汇编基础的课程&#…

LeetCode 刷题 [C++] 第139题.单词拆分

题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 题目分析 背包问题特征&#xff1a; 是否…

用云手机进行舆情监测有什么作用?

在信息爆炸的时代&#xff0c;舆情监测成为企业和政府决策的重要工具。通过结合云手机技术&#xff0c;舆情监测系统在品牌形象维护、市场竞争、产品研发、政府管理以及市场营销等方面发挥着关键作用&#xff0c;为用户提供更智能、高效的舆情解决方案。 1. 品牌形象维护与危机…

Codeforces Round 928 G. Vlad and Trouble at MIT 【树形DP】

G. Vlad and Trouble at MIT 题意 给定一颗 n n n 个节点的树&#xff0c;每个节点有一个学生&#xff0c;学生有三种类型&#xff1a; 参加派对的 P P P 类型&#xff0c;会制造噪音想要睡觉的 S S S 类型&#xff0c;不希望被吵到有没有噪音都可以的 C C C 类型 噪音会…

VUE3中ArcGIS JsAPI 4.27 Map 隐藏地图黑色边框

问题&#xff1a; vue3中引入arcgis jsapi 地图加载后&#xff0c;点击地图会出现黑色边框&#xff0c;看起来很不协调 解决方案&#xff1a; 新建自定义CSS文件&#xff0c;输入一下样式内容&#xff0c;并在vue页面直接用import引入即可。 注意&#xff1a;直接写到vue页面…

C++复习笔记——泛型编程模板

01 模板 模板就是建立通用的模具&#xff0c;大大提高复用性&#xff1b; 02 函数模板 C另一种编程思想称为 泛型编程 &#xff0c;主要利用的技术就是模板 C 提供两种模板机制:函数模板和类模板 函数模板语法 函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函…

【洛谷 P8682】[蓝桥杯 2019 省 B] 等差数列 题解(数学+排序+差分)

[蓝桥杯 2019 省 B] 等差数列 题目描述 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列&#xff0c;只记得其中 N N N 个整数。 现在给出这 N N N 个整数&#xff0c;小明想知道包含这 N N N 个整数的最短的等差数列有几项&#xff1f; 输…

Mybatis-Plus:几个好的用法

项目使用mybatis-plus&#xff0c;同事的用法让我很难苟同&#xff0c;于是自己百度了一些用法&#xff0c;分享一下。 一、静态适配器 最好使用官方提供的ObjectUtils,比较全面&#xff0c;不用加载不同的对象工具。 com.baomidou.mybatisplus.core.toolkit /*** 设置查询适配…

C# 由左上、右下两个坐标点计算矩形的长、宽以及两点的距离

一、计算长、宽 直接使用坐标点计算 // 定义矩形左上角和右下角的坐标 Point topLeft new Point(0, 0); Point bottomRight new Point(5, 10); // 计算矩形的长和宽 int width bottomRight.X - topLeft.X;//矩形宽度 int height bottomRight.Y - topLeft.Y;//矩形高度或是…

实战-Sealos一键部署k8s集群-2024.3.7(测试成功)

目录 [toc] 原文链接 实战-Sealos一键部署k8s集群-2024.3.7(测试成功) | 彦 推荐文章 我的开源项目&#xff1a; 开源项目 | 彦 实验环境 centos7.6 1810,5.4.270-1.el7.elrepo.x86_64sealos v5.0.0-beta4k8s v1.28.7 &#xff08;当前时间&#xff1a;2024年3月7日 k8s最新版…

ruoyi-vue框架密码加密传输

先看一下改造后的样子&#xff0c;输入的密码不会再以明文展示。 下面我主要把前后端改造的代码贴出来。 1.后端代码 RsaUtils类 在com.ruoyi.common.utils包下新建RsaUtils类&#xff0c;RsaUtils添加了Component注解 generateKeyPair()构建密钥对添加了Bean注解 在项目启动…

AI助力剧本创作:如何5分钟内构思出热门短剧大纲

人工智能重塑短剧行业&#xff1a;从剧本创作到市场推广 在当今短剧行业的飞速发展中&#xff0c;剧本创作的质量及其更新的速度已然成为短剧能否转化为热门作品的关键性因素。然而&#xff0c;随着短剧创作成本的日益攀升&#xff0c;一个卓越的剧本无论在创作时间上还是在构思…

java中的多线程通信问题介绍

在多线程编程中&#xff0c;通信是线程间协调和同步的重要手段。由于线程是独立执行的&#xff0c;它们需要一种机制来交换信息和协调它们的行为。Java 提供了多种方式来实现线程间的通信&#xff0c;包括共享内存、消息传递、条件变量和共享对象等。 1. 共享内存 在 Java 中&a…

vue2的element UI 表格单选

代码 this.$refs.multipleTable.toggleRowSelection(selection.shift(), false);multipleTable 是定义的表格的ref

Kubernetes(K8S之存储)

configmap configMap描述信息 configMap功能在Kubernetes1.2版本中引入&#xff0c;许多应用程序会从配置文件&#xff0c;命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制。ConfigMap可以被用来保存单个属性。 也可以用来保存整…

二叉树前序遍历函数 代码图解(先序遍历 深度优先遍历)

void PreOrder(BiTree p)//只是遍历 即只是读&#xff0c;不会改变树根 {//这个p的类型是 树的结构体 不是之前的p指针if(p!NULL){printf("%c", p->c);PreOrder(p->lchild);//函数嵌套 打印左子树PreOrder(p->rchild);//函数嵌套 打印右子树} } 同理可证 中…

如何在Win系统本地部署Jupyter Notbook交互笔记并结合内网穿透实现公网远程使用

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…