abort(計算機術語)

本詞條是多義詞,共2個義項
更多義項 ▼ 收起列表 ▲

引發不正常進程的終止。

基本介紹

  • 中文名:abort
  • 概述:引發不正常進程的終止
  • 頭檔案:#include <stdlib.h>
  • 功 能:異常終止一個進程
  • 性質:函式名
函式簡介,舉例,注意事項,

函式簡介

函式名: abort
頭檔案:#include <stdlib.h>
功 能: 異常終止一個進程。中止當前進程,返回一個錯誤代碼。錯誤代碼的預設值是3。
該函式產生SIGABRT信號並傳送給自己,默認情況下導致程式終止不成功的終止錯誤代碼返回到主機環境。
自動或靜態存儲持續時間的對象,而無需調用任何atexit函式,析構函式不執行程式終止。函式永遠不會返回到其調用者。
用 法: void abort(void);

舉例

程式例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Calling abort()\n");
abort();
return 0; /* This is never reached */
}

注意事項

因為調用abort()而終止,那么是因為某些條件成立,而用戶不得不作出終止當前進程的決定(參考assert()),abort()行為本身並不異常,如果用戶調用了,那么進程就終止,完全是預期的行為。原理上來說,abort通過給自己傳送SIGABRT信號,然後kernel會殺掉自己,並coredump。但是,如果用戶重新定義了SIGABRT信號的行為呢?
#include<stdlib.h>#include<signal.h>#include<stdio.h>#include<assert.h>voidhandler(inti){printf("catchsignal\n");}intmain(){signal(SIGABRT,handler);abort();while(1);/*Thisisneverreached*/return0;}
結果是,會列印"catch signal",然後還是coredump了。原因是:abort()函數裡面先給自己傳送SIGABRT保證handler執行,然後再重新註冊了SIGABRT,會修改成默認行為,再次給自己傳送SIGABRT,保證執行默認行為,coredump。同時,還會flush所有打開的檔案,然後關閉掉。

相關詞條

熱門詞條

聯絡我們