当前位置:嗨网首页>书籍在线阅读

08-异常终止进程_abort()

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

21.2.2 异常终止进程:abort()

函数abort()终止其调用进程,并生成核心转储。

537.png 函数abort()通过产生SIGABRT信号来终止调用进程。对SIGABRT的默认动作是产生核心转储文件并终止进程。调试器可以利用核心转储文件来检测调用abort()时的程序状态。

SUSv3要求,无论阻塞或者忽略SIGABRT信号,abort()调用均不受影响。同时规定,除非进程捕获SIGABRT信号后信号处理器函数尚未返回,否则abort()必须终止进程。后一句话值得三思。21.2节所描述的信号处理器函数终止方法中,与此相关的就是使用非本地跳转退出处理器函数。这一做法将抵消abort()的效果。否则,abort()将总是终止进程。在大多数实现中,终止时可确保发生如下事件:若进程在发出一次SIGABRT信号后仍未终止(即,处理器捕获信号并返回,以便恢复执行abort()),则abort()会将对SIGABRT信号的处理重置为SIG_DFL,并再度发出SIGABRT信号,从而确保将进程杀死。

如果abort()成功终止了进程,那么还将刷新stdio流并将其关闭。

程序清单3-3在错误处理函数中提供了使用abort()的一个例子。