-
abort
(計算機術語)
鎖定
abort是一個計算機術語,函數功能是異常終止一個進程,中止當前進程,返回一個錯誤代碼。
- 中文名
- abort
- 概 述
- 引發不正常進程的終止
- 頭文件
- #include
- 功 能
- 異常終止一個進程
- 性 質
- 函數名
abort函數簡介
函數名: abort
頭文件:#include <stdlib.h>
功 能: 異常終止一個進程。中止當前進程,返回一個錯誤代碼。錯誤代碼的缺省值是3。
用 法: void abort(void);
abort舉例
程序例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Calling abort()\n");
abort();
return 0; /* This is never reached */
}
abort注意事項
因為調用abort()而終止,那麼是因為某些條件成立,而用户不得不作出終止當前進程的決定(參考assert()),abort()行為本身並不異常,如果用户調用了,那麼進程就終止,完全是預期的行為。原理上來説,abort通過給自己發送SIGABRT信號,然後kernel會殺掉自己,並coredump。但是,如果用户重新定義了SIGABRT信號的行為呢?
#include<stdlib.h> #include<signal.h> #include<stdio.h> #include<assert.h> voidhandler(inti) { <a href="#" data-lemmaid="7467706">printf</a>("catchsignal\n"); } intmain() { signal(SIGABRT,<a href="#" data-lemmaid="10404534">handler</a>); abort(); <a href="#" data-lemmaid="755564">while</a>(1);/*Thisisneverreached*/ return0; }
結果是,會打印"catch signal",然後還是coredump了。原因是:abort()函數里面先給自己發送SIGABRT保證handler執行,然後再重新註冊了SIGABRT,會修改成默認行為,再次給自己發送SIGABRT,保證執行默認行為,coredump。同時,還會flush所有打開的文件,然後關閉掉。
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:19次歷史版本
- 最近更新: Kylin_TOT