进程异常 退出

C语言中退出码和异常处理

进程运行完毕后

  1. 代码运行完毕,结果正确。
  2. 代码运行完毕,结果错误。
  3. 代码异常终止,程序没有跑完,没有执行到return,那此时通常视退出码没有意义,此时有意义的是为什么会发生异常
  4. 异常的意义并非是在本次运行过程中处理问题,而是反馈问题。

退出码

进程的退出码,用于表征运行结果是否正确。

  • 一般使用return 0来代表运行成功。而用其他的数字来表示不同的推出原因。

  • bash中,可以使用echo $?来获得最近一次进程退出时候的退出码

  • 系统接口strerror(error_num)将错误码转化为字符串类型的字符信息。

errno

头文件:error.h

  • errno一个全局变量,保存的是最近一次执行的错误码。

strerror

  • 定义: strerror 是一个函数,用于将 errno 中的错误代码转换为对应的错误消息字符串。
  • 用法: strerror(errno) 会返回一个描述当前 errno 值的错误消息。
    • 例如,如果 errno 被设置为 2(对应“没有这样的文件或目录”错误),则 strerror(errno) 会返回对应的错误消息 “No such file or directory”。

异常

进程出现异常,本质上是我们的进程收到了对应的信号。

例如:(使用kill -l 可以查看信号,如果kill -signal + pid 可以让对应的进程中断并显示异常信息。)

exit(退出码)和return(退出码)

  • exit是一个库函数

  • returnmain函数()中代码进程结束,在其他函数中只代表当前函数返回

  • exit()在任何函数中都代表进程退出

  • exit结束后,会执行用户定义的清理函数,刷新用户缓冲区,关闭流等最后再调用_exit()

_exit()

  • 是一个系统调用接口,逻辑和exit相似,但看不到用户缓冲区

Core Dump(核心转储)

一旦进程出现异常,操作系统会将进程在内存中的运行信息,转储到进程的当前目录中,形成一个core pid文件。

Core Dump的作用

  • Core Dump(核心转储)是操作系统在进程异常终止时生成的文件可以定位原始代码中,出错的代码等信息
    • 但在线上服务中,它一般是关闭的,为了防止出现异常时产生大量Core Dump文件。

gdb my_program core可以查看Core Dump文件


进程异常 退出
https://weihehe.top/2024/07/09/异常/
作者
weihehe
发布于
2024年7月9日
许可协议