08-异常终止进程_abort()
21.2.2 异常终止进程:abort()
函数abort()终止其调用进程,并生成核心转储。
函数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()的一个例子。