【Linux系统编程】进程终止

目录

strerror函数

 errno错误码

退出码

正常终止(可以通过 echo $? 查看进程退出码):

1. 从main返回(return)

2. 调用exit

3. _exit(一般尽量不要用)

异常退出:

ctrl + c,信号终止


 进程退出有以下三种场景:

1.进程代码运行完毕,运行结果无错误。

2.进程代码运行完毕,运行结果有某种错误。

3.代码异常终止。

在进程运行结束后系统可能会给我们用户返回某种进程运行错误,通过进程返回的错误信息来使我们审视 为什么会发生异常?发生了什么异常?这两个问题。我们认识一下几个与进程返回错误信息有关的函数:

strerror函数

解释错误码对应的错误信息,头文件:<string.h>

1594e3b124714eb7897ccfd0ab47cfa7.png

 errno错误码

对应程序执行过程中的错误信息,头文件:<errno.h>

65cd2adfe3a8426aae126f3ca1b86e0e.png

退出码

是进程return后的数字,退出码可以得到相应的进程代码执行过程发生的错误信息。

接下来我们来看一下在linux操作系统中,进程执行时发生的错误对应的错误码代表的错误信息有哪些:

b0a13e5959964f4394e98d8c1dbeb49a.png

其实错误码errno一共有133中(不算0),这里只截取了115个。

下面我们来看一下利用返回错误码来获取程序执行时发生的错误信息。

5bd11c514a35407fb6f014d5dfa0e985.png

为了查看程序因在堆上申请内存失败而产生的错误信息,我们故意利用malloc函数申请超额空间。

我们执行可执行程序proc:

cfc2d1d3dba44c9cb189be5e8255b1e0.png?这个问号符存储的是命令行最近执行的进程退出码。$?查看?里的退出码,echo是打印指令,echo $?打印出最近命令行进程的退出码。注意:错误码/退出码是0不表示任何错误信息,0代表的是进程执行无异常。

aff074ed9d844d488abb52b46cd33487.png

 在命令行执行的指令本质上是一个进程,在执行完打印proc进程的退出码的指令后,再执行打印指令:echo $?此时结果是0即进程执行成功,这是因为执行上一次echo指令进程在终端打印了12因此上一次的echo指令进程执行成功,因此命令行最近执行的进程退出码是0。

进程常见的退出方式:

正常终止(可以通过 echo $? 查看进程退出码):

1. 从main返回(return)

2. 调用exit函数

3b155a6548a54e87a780d3d54e149f32.png

3. _exit函数(一般尽量不要用)

 
f2ca6ec1f9ed4bf397a70e947a6a7434.png

下面来了解一下return和调用exit的程序退出方式:

a508419ae0ee4b79bd620dea3b93f350.png

fcaefe450d1d4e5e9bc736f3f9a740c8.png

没有打印hello world是因为进程调用exit函数被终止退出。并且进程的退出码是exit的参数。

认识一下exit和_exit的区别:

77589137f747420195f5986748082aa3.png

482b51219b81409cb3a17e14369d8773.png

注意:在linux操作系统中如果要打印的字符串后没有加\n那么执行到该句代码,该字符串就会被暂时存入缓冲区,不会立刻被打印在终端,只有进程结束时才会将该字符串打印到终端;要打印的字符串后加\n执行到该句代码缓冲区被刷新,会立刻在终端打印该字符串。

55e1f5f281514ffea312ace6b51fdae1.png

82d06125d996456590a89a37fe32c4a6.png

6e022240817c4800a2596776275ef0fe.png

异常退出:

ctrl + c,信号终止

 
这里我们来看一下信号终止进程:
1785d07f58dd43e8abfd75b8e606dc68.png
 
6a4c6738c9c34a96a330f1ba64d03696.png
 
这里故意给进程一个错误信号以终止该进程。
进程出现异常本质是进程收到了对应的信号。
 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

瓦片边界可视化工具

本文涉及的核心内容 瓦片边界可视化-VisibleTileBoundariesmeethigher/visible-tile-boundaries: visible tiles boundaries demo 一、瓦片边界可视化 1.1 背景 日常GIS开发中&#xff0c;需要了解瓦片是什么&#xff0c;瓦片展示的效果是什么样的。这种口头上抽象的东西&a…

惊艳的短视频:成都科成博通文化传媒公司

惊艳的短视频&#xff1a;瞬间之美&#xff0c;震撼心灵 在数字化时代&#xff0c;短视频以其短小精悍、内容丰富的特点&#xff0c;迅速占领了我们的屏幕和时间。而在这个浩如烟海的视频海洋中&#xff0c;总有一些短视频能够脱颖而出&#xff0c;以其惊艳的视觉效果、深刻的…

您对薪资待遇是否满意?没证据怎么办?这样做很可能会补上来!

您对薪资待遇是否满意&#xff1f;没证据怎么办&#xff1f; 这样做很可能会补上来&#xff01; 您有时可能对自己的工资或福利待遇感到不满意&#xff1a;感到为何我付出的不比别人少&#xff0c;但是工资待遇总是比别人低&#xff0c;是不是觉得很不服气&#xff1f;那么不服…

【技巧】让xorg和gnome不要使用GPU

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 默认xorg会使用GPU加速&#xff1a; 现在取消他对GPU的占用&#xff1a; sudo vim /etc/X11/xorg.conf修改或添加以下内容&#xff1a; Section &quo…

迁移学习助力机器学习实践应用

大家好&#xff0c;迁移学习是一种技术&#xff0c;能使机器利用从以前任务中获得的知识来提高对新任务的泛化能力。作为ChatGPT和Google Gemini等模型的核心原理&#xff0c;迁移学习在长文档总结、复杂文章撰写、旅行规划以及诗歌和歌曲创作等重要任务中发挥着关键作用。 本…

ArcGIS+SWAT+CENTURY:流域生态系统水-碳-氮耦合过程模拟

目录 章节一 流域水碳氮建模-概述 章节二 数据准备 章节三 流域水模拟 章节四 流域氮模拟 章节五 流域碳模拟 章节六 模型结果分析及地图制作 章节七 案例分析 更多应用 流域是一个相对独立的自然地理单元&#xff0c;它是以水系为纽带&#xff0c;将系统内各自然地理要…

verilog阻塞和非阻塞语法

阻塞和非阻塞是FPGA硬件编程中需要了解的一个概念,绝大部分时候,因为非阻塞的方式更加符合时序逻辑设计的思想,有利于时钟和信号的同步,更加有利于时序收敛,所以除非特殊情况,尽量采用非阻塞方式。 1,非阻塞代码 非阻塞赋值,A和B是同时被赋值的,具体是说在时钟的上升…

设计模式-享元模式(结构型)

享元模式 享元模式是一种结构型模式&#xff0c;它主要用于减少创建对象的数量&#xff0c;减少内存占用。通过重用现有对象的方式&#xff0c;如果未找到匹配对象则新建对象。线程池、数据库连接池、常量池等池化的思想就是享元模式的一种应用。 图解 角色 享元工厂&#xf…

【GreenHills】关于GHS加密狗license激活成功后打开软件提示无可用授权

【更多软件使用问题请点击亿道电子官方网站】 1、 问题场景 用于解决在使用加密狗license去激活旧版本的GHS的时候&#xff0c;激活页面显示激活成功&#xff0c;但是&#xff0c;打开软件显示无可用license&#xff08;如图2-1&#xff09;&#xff0c;重新激活现象还是一样的…

catia零件装配中通过指南针移动零件

1 将零件导入进来后 2 把指南针移动到零件上 具体移动哪个可以通过模型树点击选中&#xff0c;选中那个就可以移动那个。 这种情况需要注意的是 需要双击选择要移动零件的父节点 如下图&#xff0c;Product2蓝色表示是激活的&#xff0c;这样才可以单击选中下面的零件后通过…

Echarts 绘制地图(中国、省市、区县),保姆级教程!

前言&#xff1a;大家好呀&#xff0c;这篇讲述 VueEcharts 绘制地图&#xff08;中国、省市、区县&#xff09;&#xff0c;保姆级教程&#xff01;话不多说&#xff0c;上干货&#xff1a; 先安利两个网址&#xff0c;是制作地图的资源&#xff1a; DataV.地图GeoJSON数据 Ap…

IINA for Mac v1.3.5 安装教程(保姆级)

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件&#xff0c;测试2、查看版本号 **安装完成&#xff01;&#xf…

【总线】设计fpga系统时,为什么要使用总线?

目录 为什么用总线 为什么选择AMBA 总结 系列文章 【总线】AMBA总线架构的发展历程-CSDN博客 【总线】设计fpga系统时&#xff0c;为什么要使用总线&#xff1f;-CSDN博客 为什么用总线 在FPGA系统设计中&#xff0c;使用总线是为了实现组件间的高效互联与通信&#xff0c…

30岁迷茫?AI赛道,人生新起点

前言 30岁&#xff0c;对于许多人来说&#xff0c;是一个人生的分水岭。在这个年纪&#xff0c;有些人可能已经在某个领域取得了不小的成就&#xff0c;而有些人则可能开始对未来的职业方向感到迷茫。如果你正处于这个阶段&#xff0c;那么你可能会问自己&#xff1a;30岁转行…

influxDB部署

influxDB部署 1.首先我们进入influxDB的官方网站的下载页面&#xff1a; https://portal.influxdata.com/downloads/获取相应的版本。我们会看到如下界面 然后这里我们选择influxDB中的V2.0.4版本进行点击进入&#xff0c;进入到对应的页面之后这里我们会看到针对不同操作系统…

Unity HoloLens2 MRTK 空间锚点 基础教程

Unity HoloLens2 MRTK 空间锚点 基础教程 Unity HoloLens2 空间锚点MRTK 空间锚点 准备Unity 工程创建设置切换 UWP 平台UWP 平台设置 下载并安装混合现实功能工具导入混合现实工具包和 OpenXR 包 Unity 编辑器 UWP 设置Unity 2019.4.40 设置Unity 2022.3.0 设置Unity 2022.3.0…

Python pickle反序列化

基础知识 Pickle Pickle在Python中是一个用于序列化&#xff08;将对象转换为字节流&#xff09;和反序列化&#xff08;将字节流转换回对象&#xff09;的标准库模块。它主要用于将Python对象保存到文件或通过网络进行传输&#xff0c;使得数据可以跨会话和不同的Python程序共…

LVS负载均衡群集与NAT模式LVS负载均衡部署

1、LVS-DR工作原理 1、数据包流向分析 第一步&#xff1a;客户端发送请求到 Director Server (负载均衡器&#xff09;&#xff0c;请求的数据报文到达内核空间。 数据报文 源 IP ------客户端的 IP 目标 IP ------ VIP 源 MAC ------客户端的 MAC 目的 MAC ------ Director …

Vue2+Vue3知识补充

defineProperty 一个对象默认的配置规则参数如下&#xff0c;通常都是为true。通过getOwnPropertyDescriptor方法查看 let obj {x: 10,};console.log(Object.getOwnPropertyDescriptor(obj, "x"));当使用defineProperty定义一个对象中已经存在属性的配置项时。如果…

二刷算法训练营Day28 | 回溯算法(4/6)

目录 详细布置&#xff1a; 1. 93. 复原 IP 地址 2. 78. 子集 3. 90. 子集 II 详细布置&#xff1a; 1. 93. 复原 IP 地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔…