进程异常 退出
C语言中退出码和异常处理
进程运行完毕后
- 代码运行完毕,结果正确。
- 代码运行完毕,结果错误。
- 代码异常终止,程序没有跑完,没有执行到return,那此时通常视退出码没有意义,此时有意义的是为什么会发生异常。
- 异常的意义并非是在本次运行过程中处理问题,而是反馈问题。
退出码
进程的退出码,用于表征运行结果是否正确。
一般使用
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
是一个库函数return
在main
函数()中代码进程结束,在其他函数中只代表当前函数返回。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/异常/