函数名:abort
头文件:#include
功能:异常终止一个进程。中止当前进程,返回一个错误代码。错误代码的缺省值是3。
该函数产生SIGABRT信号并发送给自己,默认情况下导致程序终止不成功的终止错误代码返回到主机环境。
自动或静态存储持续时间的对象,而无需调用任何atexit函数,析构函数不执行程序终止。函数永远不会返回到其调用者。
用法:void abort(void);
程序例:
#include
#include
int main(void)
{
printf("Calling abort()\n");
abort();
return 0; /* This is never reached */
}
因为调用abort()而终止,那么是因为某些条件成立,而用户不得不作出终止当前进程的决定(参考assert()),abort()行为本身并不异常,如果用户调用了,那么进程就终止,完全是预期的行为。原理上来说,abort通过给自己发送SIGABRT信号,然后kernel会杀掉自己,并coredump。但是,如果用户重新定义了SIGABRT信号的行为呢?
结果是,会打印"catch signal",然后还是coredump了。原因是:abort()函数里面先给自己发送SIGABRT保证handler执行,然后再重新注册了SIGABRT,会修改成默认行为,再次给自己发送SIGABRT,保证执行默认行为,coredump。同时,还会flush所有打开的文件,然后关闭掉。
Copyright 2023 fuwu029.com赣ICP备2022008914号-4