【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
 
这里故意给进程一个错误信号以终止该进程。
进程出现异常本质是进程收到了对应的信号。
 

 

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 22:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 22:34:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 22:34:01       82 阅读
  4. Python语言-面向对象

    2024-06-11 22:34:01       91 阅读

热门阅读

  1. 求职刷题 力扣 day10 ---栈与队列part01

    2024-06-11 22:34:01       32 阅读
  2. 2024下半年软考时间线梳理!

    2024-06-11 22:34:01       89 阅读
  3. 英伟达SSD视觉算法语义分割代码分析

    2024-06-11 22:34:01       22 阅读
  4. Web前端后端结合:深度解析与实战策略

    2024-06-11 22:34:01       33 阅读
  5. Linux面试常见问题

    2024-06-11 22:34:01       22 阅读