abort 함수

void abort(void); SIGABRT 시그널을 발생하는 함수

입력 매개 변수 리스트

없음

반환 값

없음

abrot 함수는 SIGABRT 시그널을 발생하는 함수로 raise(SIGABRT)와 같은 역할을 수행합니다. SIGABRT는 프로세스가 비정상적인 상태에 도달했을 때 강제로 프로세스를 종료하기 위한 시그널입니다. 만약 프로그램에 SIGABRT 시그널 핸들러를 등록하면 다른 방식으로 처리할 수 있습니다. 참고로 Microsoft Visual C에서는 abort 함수를 호출하면 SIGABRT 시그널을 발생하는 것 외에도 오류 창을 띄웁니다. 만약 abort 함수를 호출할 때 SIGABRT 시그널만 발생하고 오류 창을 뜨지 않게 하려면 _set_abort_behavior( 0, _WRITE_ABORT_MSG);를 호출합니다.

다음의 예제 코드에서는 _set_abort_behavior( 0, _WRITE_ABORT_MSG);를 호출하여 abort 함수 호출 시 오류 창이 뜨는 것을 방지하였습니다. 그리고 초기에 SIGABRT 시그널 핸들러를 등록한 후 abort 함수를 두 번 호출합니다. 그리고 SIGABRT 시그널 핸들러에서는 발생한 시그널이 SIGABRT일 때 디폴트 시그널 핸들러로 설정합니다. 따라서 실제 실행하면 첫번째 SIGABRT 시그널이 발생하면 등록한 시그널 핸들러가 동작하지만 두번째 SIGABRT 시그널이 발생하면 디폴트 행위가 동작합니다. SIGABRT 시그널의 디폴트 행위는 프로세스 강제 종료입니다.

사용 예

//C언어 표준 라이브러리 함수 가이드
//SIGABRT 시그널을 발생하는 함수
//SIGABRT 시그널 핸들러를 등록하고 프로그램 방식으로 SIGARBT 시그널 발생

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void MySigHandler(int signo);
void Test();
int main(void)
{    
     _set_abort_behavior( 0, _WRITE_ABORT_MSG);//abort 함수 호출하였을 때 오류 창 뜨지 않게 설정
    signal(SIGABRT,MySigHandler);//SIGABRT 시그널 핸들러 등록    
    Test();//테스트 
    return 0;
}

void MySigHandler(int signo)
{
    printf("%d signal 발생\n",signo);
    if(signo == SIGABRT)//발생한 시그널이 SIGABRT일 때
    {
        signal(SIGABRT,SIG_DFL);//SIGABRT 시그널 핸들러를 디폴트로 설정
    }
}
void Test()
{
    printf("Test 1\n");//테스트 용
    abort();//SIGABRT 발생 raise(SIGABRT); 와 같음
    printf("Test 2\n");//테스트 용
    abort();//SIGABRT 발생 raise(SIGABRT); 와 같음
    printf("Test 2\n");//테스트 용
}

출력

Test 1
22 signal 발생