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 발생