目录
strerror函数
errno错误码
退出码
正常终止(可以通过 echo $? 查看进程退出码):
1. 从main返回(return)
2. 调用exit
3. _exit(一般尽量不要用)
异常退出:
ctrl + c,信号终止
进程退出有以下三种场景:
1.进程代码运行完毕,运行结果无错误。
2.进程代码运行完毕,运行结果有某种错误。
3.代码异常终止。
在进程运行结束后系统可能会给我们用户返回某种进程运行错误,通过进程返回的错误信息来使我们审视 为什么会发生异常?发生了什么异常?这两个问题。我们认识一下几个与进程返回错误信息有关的函数:
strerror函数
解释错误码对应的错误信息,头文件:<string.h>
errno错误码
对应程序执行过程中的错误信息,头文件:<errno.h>
退出码
是进程return后的数字,退出码可以得到相应的进程代码执行过程发生的错误信息。
接下来我们来看一下在linux操作系统中,进程执行时发生的错误对应的错误码代表的错误信息有哪些:
其实错误码errno一共有133中(不算0),这里只截取了115个。
下面我们来看一下利用返回错误码来获取程序执行时发生的错误信息。
为了查看程序因在堆上申请内存失败而产生的错误信息,我们故意利用malloc函数申请超额空间。
我们执行可执行程序proc:
?这个问号符存储的是命令行最近执行的进程退出码。$?查看?里的退出码,echo是打印指令,echo $?打印出最近命令行进程的退出码。注意:错误码/退出码是0不表示任何错误信息,0代表的是进程执行无异常。
在命令行执行的指令本质上是一个进程,在执行完打印proc进程的退出码的指令后,再执行打印指令:echo $?此时结果是0即进程执行成功,这是因为执行上一次echo指令进程在终端打印了12因此上一次的echo指令进程执行成功,因此命令行最近执行的进程退出码是0。
进程常见的退出方式:
正常终止(可以通过 echo $? 查看进程退出码):
1. 从main返回(return)
2. 调用exit函数
3. _exit函数(一般尽量不要用)
下面来了解一下return和调用exit的程序退出方式:
没有打印hello world是因为进程调用exit函数被终止退出。并且进程的退出码是exit的参数。
认识一下exit和_exit的区别:
注意:在linux操作系统中如果要打印的字符串后没有加\n那么执行到该句代码,该字符串就会被暂时存入缓冲区,不会立刻被打印在终端,只有进程结束时才会将该字符串打印到终端;要打印的字符串后加\n执行到该句代码缓冲区被刷新,会立刻在终端打印该字符串。
异常退出:
ctrl + c,信号终止