abort() 함수에 대한 번역인데요. 이게 무슨 뜻인지 정확하게 알 수가 없습니다.
void abort(void)
Aborts the current process, producing an abnormal program termination.
The function raises the SIGABRT signal (as if raise(SIGABRT) was called). This, if uncaught, causes the program to terminate returning a platform-dependent unsuccessful termination error code to the host environment.
The program is terminated without destroying any object and without calling any of the functions passed to atexit or at_quick_exit.
[참조사이트]
http://www.cplusplus.com/reference/cstdlib/abort/?kw=abort
void abort(void)
현재의 프로세스를 중지시킨고 비정상적인 프로그램 종료를 만들어낸다.
이 함수는 SIGABRT 신호를 유발한다(마치 raise(SIGART)가 호출된 것처럼). 이 신호가 잡히지 않으면, 이러한 이유로 인해 프로그램이 플랫폼에 따라서 호스트 환경에 이르는 실패중지오류코드를 반환하면서 프로그램이 종료되도록 한다.
그런 프로그램(이 부분 해석이 좀 애매모호합니다)은 어떤 객체의 파괴도 없이 그리고 atexit 또는 at_quick_exit 함수를 호출하는 어떤 함수의 호출도 없이 정지된다.
여기서 '그런 프로그램'이라는 것이 무엇을 말하는 것인가요? 신호가 발생했는데 신호가 잡히지 않은 프로그램인가요? 아니면 신호가 발생한 프로그램을 뜻하는 것인가요?
일반적으로 abort 함수가 호출되면 이 함수 호출 전에 생성됐던 객체는 모두 소멸되나요? exit() 함수는 소멸된다고 그러던데요.
?
그냥 abort 함수가 호출된 프로그램을 얘기하는 걸 겁니다. abort 함수가 호출되면 그냥 말 그대로 바로 종료되어 버리고
비정상 종료에 대한 시그널이 일어나는 겁니다. exit 의 경우 atexit 같은 함수가 호출되었으면 등록된 핸들러를 호출한 다음
프로그램이 종료되지만 abort 함수는 그냥 말 그대로 바로 정지되어 버립니다.
그렇다면,
프로그램이 객체를 정리하지 못한다로 결론을 내리면 되겠군요. 감사합니다.mikheer님께도 감사드립니다.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
아는대로만..
"그런 프로그램"이라기보단 "그 프로그램"입니다. 저 시그널의 핸들러가 없는 경우 그냥 자원 반환따윈 없이 종료시켜버린다는 얘기죠. 엄밀히 말해 신호 발생 주체와는 직접적인 관계가 없고, 해당 시그널을 받은 프로세스에 대한 얘깁니다. 예외처리랑 비슷한 얘기라고 할 수도 있고요.
OS가 관장하는 자원의 경우 딱히 상속받은 녀석이 없다면 프로세스가 어떻게 종료되든 모두 반납되는 게 정상이므로 로컬 자원에 대해선 크게 문제될 것은 없으나 (그래도 여기에 의존하지 말고 반환 코드는 모두 수행해주는 게 바람직하겠죠), OS가 프로세스에 대해 자동으로 관리하지 못하는 자원(주로 원격 자원)의 경우는 제대로 핸들링하지 못한 시그널이나 예외들이 문제의 소지가 되므로 주의를 요합니다.
--
댓글 달기