进程的终止

进程的退出(main函数的退出)

        main函数的返回值叫做进程的退出码,该退出码表示进程执行的情况。例如:一个函数返回一个值时,我们要知道函数的执行情况,可以去看函数的返回值。

例子:

  1 #include<stdio.h>2 int main()3 {4   return 10;//把返回值故意设置成10                                            5 }

        运行后,使用 echo $? 查看最近一次进程结束的退出码

        一般地,0表示进程执行成功,非0表示失败(与C++中0表示假,非0表示真相反),用不同的数字表示失败的原因。(这就是为什么用非0表示失败,0表示成功,因为0只有一个,表示成功不需要原因,而失败的原因有多种,可以用非零的多种数字来表示)。

        错误码转化成错误描述,这样我们就知道进程终止的原因。

关于错误描述

1.使用语言和系统自带的方法,进行转换

        我们打印Linux系统的错误码strerror和错误信息进行观察。

代码:

int main()
{for(int i=0;i<200;i++){printf("%d:%s\n",i,strerror(i));}return 10;
}

部分错误描述如下: 

        如图:0表示进程执行成功,1表示操作不被允许,2表示没有找到文件或目录……

2.自定义错误信息

        我们可以进行自定义错误信息

    6 enum{7   success = 0,8   open_err,9   malloc_err10 };                                                                                                                                                 11 const char* errorToDesc(int code)12 {                               13   switch(code)                  14   {                             15     case success:               16       return "success";         17     case open_err:              18       return "file open error"; 19     case malloc_err:20       return "malloc error";21     default:22       return "unknown";23   }24 }25 int main()26 {27   int code = malloc_err;28   printf("%s\n",errorToDesc(code));29   return code;30 }     

结果:

函数的退出(关于errno)

        除了进程退出,函数退出,我们怎么知道函数执行情况?函数有返回值!这里与进程的退出极其类似。

        调用函数,我们通常希望看到两种情况:

1.函数的执行结果——我们需要的返回值

2.函数的执行情况——成功,失败(什么原因)

        通常根据函数的返回值就可以判断,该函数的执行情况是否成功,但是但我们需要知道函数为什么失败时就需要函数的错误码(类似于进程的退出码)。

进程退出的场景

1.代码运行完毕,结果正确

2.代码运行完毕,结果不正确

3.代码没有执行完,异常终止

        其中前两个根据进程的退出码可以进行判断。 而第3条是进程收到了异常信号,每个信号都有不同的编号,而不同的信号编号表明了异常的原因。

        结论:任何进程的最终执行情况,都可已使用两个数字(信号编号,退出码)表明具体的执行情况。

signumber(信号编号)exit_code(退出码)情况
00代码正常执行完,进程正常退出
0!0代码跑完,结果不正确
!0!0 or 0代码没有执行完,收到异常信号,退出码无意义

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

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

相关文章

【VTKExamples::Points】第五期 ExtractPointsDemo

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ExtractPointsDemo,并解析接口vtkExtractPoints,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U…

进程优先级

文章目录 一、进程优先级二、查看进程优先级以及修改优先级 一、进程优先级 cpu资源少量&#xff0c;只有一个然而在操作系统中存在很多进程&#xff0c;这些进程访问cpu资源时他们相互之间是存在竞争关系。cpu为了保他们之间的公平&#xff0c;也就存在了优先级&#xff01;那…

NX二次开发——获取当前dll的全路径,上一级路径和名称

在nx二次开发中经常会用到dll的全路径&#xff0c;上一级路径和名称&#xff0c;这里我对其进行封装&#xff0c;方便以后调用。 关键代码&#xff1a; //头文件 #include <Windows.h> #include <atlbase.h>//获取当前dll所在的文件夹(mode:0-全路径名&#xff0…

【DP】第十四届蓝桥杯省赛C++ B组《接龙数列》(C++)

【题目描述】 对于一个长度为 K 的整数数列&#xff1a;A1,A2,...,AK&#xff0c;我们称之为接龙数列当且仅当 的首位数字恰好等于 的末位数字 (2≤i≤K)。 例如 12,23,35,56,61,11 是接龙数列&#xff1b;12,23,34,56 不是接龙数列&#xff0c;因为 56 的首位数字不等于 3…

STM32最小核心板使用HAL库ADC读取MCU温度(使用DMA通道)

STM32自带CPU的温度数据&#xff0c;需要使用ADC去读取。因此在MX创建项目时如图配置&#xff1a; 模块初始化代码如下&#xff1a; void MX_ADC1_Init(void) {/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_ChannelConfTypeDef sConfig {0};/* USER…

C语言例:设 int x=1,y=3,z; 则执行语句z=x>y?++x:y++; 后,z的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int x1,y3,z; zx>y?x:y; //z(x>y?x:y)//x>y?x:y -->y3 z3printf("z %d\nx %d\ny %d\n",z,x,y); //3 1 4return 0; } 结果如下&#xff1a;

【计算机网络篇】物理层(3)编码与调制

文章目录 &#x1f354;编码与调试⭐基本概念 &#x1f354;基本的带通调制方法和混合调制方法⭐基本的带通调制方法⭐混合调制方法 &#x1f354;编码与调试 物理层是OSI模型中的第一层&#xff0c;它负责在物理媒体上传输原始比特流。在物理层的编码和调试中&#xff0c;我们…

【JS进阶】第二天

JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用&#xff0c;体会 JavaScript 一切皆对象的语言特征&#xff0c;掌握常见的对象属性和方法的使用。 了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用…

Jmeter多台机器并发请求实现压力性能测试

工作需要开始研究前置服务的压力性能测试&#xff0c;最后选定用jemeter工具&#xff0c;先用本机跑一万个用户&#xff0c;电脑直接蓝屏&#xff0c;通过研究发现当需要模拟数多达上万的并发用户时&#xff0c;使用单台电脑(CPU和内存)可能无法支持&#xff0c;会将程序跑崩溃…

CC-DefineTag:一个简单好用的标签组件,支持自动换行、自适应高度,且可设置行数、标签文字颜色等属性

CC-DefineTag&#xff1a;一个简单好用的标签组件&#xff0c;支持自动换行、自适应高度&#xff0c;且可设置行数、标签文字颜色等属性 摘要&#xff1a; 在前端开发中&#xff0c;标签组件是常见的UI组件之一&#xff0c;用于显示一组相关的标签。然而&#xff0c;传统的标签…

半路出家嵌入式可行吗?

最近看到一个提问&#xff0c;原话如下&#xff1a; 我是一个211电子信息23届硕士毕业生&#xff0c;中间转码了去搞了前端&#xff0c;硕士期间也有过几个大厂实习&#xff0c;然后找工作时手头上有20&#xff0c;30的工作&#xff0c;但最后选择时基于稳定性考虑还是选了家这…

Springboot+vue的医疗挂号管理系统+数据库+报告+免费远程调试

效果介绍: Springbootvue的医疗挂号管理系统&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的医疗挂号管理系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;con…

【Java Web基础】一些网页设计基础(五)

文章目录 1. 图片在盒子内部垂直居中2. 底部设计&#xff0c;图片或子元素居中于父盒子&#xff08;水平、垂直&#xff09;&#xff0c;随着屏幕大小放大或缩小3. 使用thymeleaf的th:each会导致样式失效错乱问题 1. 图片在盒子内部垂直居中 用弹性盒子实现垂直居中及用css实现…

用 Open-Sora 高效创作视频,让创意触手可及

近年来&#xff0c;视频内容以爆炸式增长席卷了我们的生活。从短视频平台到直播带货&#xff0c;视频正成为人们获取信息和娱乐的主要方式。然而&#xff0c;传统视频制作流程往往耗时费力&#xff0c;对于普通用户来说门槛较高。 为了降低视频创作门槛&#xff0c;让更多人享…

无人机自动返航算法实现与优化

一、引言 随着无人机技术的快速发展&#xff0c;其在航拍、农业、救援等领域的应用越来越广泛。在这些应用中&#xff0c;无人机的自动返航功能显得尤为重要。一旦无人机失去控制或与遥控器失去连接&#xff0c;自动返航算法能够确保无人机安全返回起飞点&#xff0c;避免损失和…

windows上打开redis服务闪退问题处理

方法1&#xff1a;在windows上面打开redis服务时&#xff0c;弹窗闪退可能是6379端口占用&#xff0c;可以用以下命令查看&#xff1a; netstat -aon | findstr 6379 如果端口被占用可以用这个命令解决&#xff1a; taskkill /f /pid 进程号 方法2&#xff1a; 可以使用…

leetcode 3035

leetcode 3035 题目 例子 思路 统计字符出现的频次&#xff0c;5个a(字符可以成为回文)。 将所有字符放在一起考虑&#xff0c;因为字符是可以任意移动。[“aabb”,“a”] > [“abba”, “a”] 只要奇数个字符的种类&#xff0c;不要超过字符数组的size就可以。 代码实现…

IT部门领导的角色与责任:在挑战中塑造未来

前言 在当今快节奏的商业环境中&#xff0c;IT部门领导扮演着至关重要的角色。他们需要具备技术专长&#xff0c;同时也需要展现出卓越的领导力来有效地管理团队和应对各种挑战。 一、技术创新的引领者 1. 重要角色转变 随着信息技术的迅猛发展&#xff0c;IT部门领导已逐渐…

Android14 - Framework- Configuration的创建和更新

本文描述从启动一个新进程的Activity起&#xff0c;Framwork层Configuration的创建和传导过程。 首先&#xff0c;我们知道所有的Window容器都继承于WindowContainer&#xff0c;而WindowContainer本身是ConfigurationContainer的子类。于此同时&#xff0c;WindowProcessContr…

3.21总结

D - Shufflem Up 在扑克桌上&#xff0c;扑克玩家常常会玩一种叫做“洗筹码”的游戏。洗筹码是通过将两堆扑克筹码 S1 和 S2 进行交错堆叠来完成的&#xff0c;每堆筹码包含 C 个筹码。每堆筹码可能包含多种不同颜色的筹码。 实际的洗牌操作是通过将 S1 中的一枚筹码与 S2 中的…