【Linux系统编程】进程终止

news/2024/6/16 17:00:28 标签: 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.niftyadmin.cn/n/5514358.html

相关文章

集合进阶(接口Collection(迭代器、增强for、Lambda表达式)、List中常见的方法和五种遍历方式、数据结构(栈、队列、数组、链表)

一、单列集合顶层Collection List系列集合&#xff1a;添加的元素是有序、可重复、有索引Set系列集合&#xff1a;添加的元素是无序、不重复、无索引 Collection是单列集合的祖宗接口&#xff0c;它的功能是全部单列集合都可以继承使用的。 Collection的遍历方式 1、迭代器——…

Linux电话本的编写-shell脚本编写

该电话本可以实现以下功能 1.添加用户 2.查询用户 3.删除用户 4.展示用户 5.退出 代码展示&#xff1a; #!/bin/bash PHONEBOOKphonebook.txt function add_contact() { echo "Adding new contact..." read -p "Enter name: " name …

c++_0基础_讲解2 头文件 基本框架

c头文件 C头文件是一种常见的文件类型&#xff0c;用于声明和定义类、函数、变量等元素。头文件通常以.h或.hpp作为扩展名&#xff0c;并包含在C源代码文件中以引入相关的声明和定义。 在C中&#xff0c;头文件的作用主要包括以下几个方面&#xff1a; 1. **声明类和函数**&a…

Python pickle反序列化

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

最详细的JS学习笔记(连载)第二章、函数(匿名函数/自执行函数)

7、匿名函数/自执行函数 匿名函数&#xff1a;没有函数名的函数 (1)、创建匿名函数 function(){ return hi; //单独的匿名函数是无法运行的&#xff0c;就算能运行也无法调用&#xff0c;因为没有名字 } 用匿名函数的好处就是&#xff0c;省得定义一个用一次就不用的…

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

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

鸿蒙原生开发——轻内核A核源码分析系列三 物理内存(2)

3.1.2.3 函数OsVmPhysLargeAlloc 当执行到这个函数时&#xff0c;说明空闲链表上的单个内存页节点的大小已经不能满足要求&#xff0c;超过了第9个链表上的内存页节点的大小了。⑴处计算需要申请的内存大小。⑵从最大的链表上进行遍历每一个内存页节点。⑶根据每个内存页的开始…

React 懒加载源码实现

懒加载 React 中懒加载是一种按需加载组件的机制&#xff0c;有些组件不需要在页面初始化就进行加载&#xff0c;这些组件可以按需加载&#xff0c;当需要时再进行加载。懒加载是怎么实现的呢&#xff1f;如果要实现一个懒加载功能应该怎么去做呢&#xff1f;可以通过异步动态…