exit()와 abort()의 차이점은 무엇입니까?
와 C에서는 C++의 차이는 입니까?exit()
★★★★★★★★★★★★★★★★★」abort()
에러 후에 프로그램을 종료하려고 합니다(예외는 아닙니다).
abort()
프로그램을 종료하기 전에 먼저 를 사용하여 등록된 함수를 호출하지 않고 오브젝트의 소멸자를 호출하지 않고 종료합니다.단, 자동 객체에 대해서는 소멸자를 호출하지 않습니다.그렇게
A a;
void test() {
static A b;
A c;
exit(0);
}
a
★★★★★★★★★★★★★★★★★」b
단, 「」, 「파괴자」는 호출하지 .c
abort()
은 다음과 같은 적절한종료를 이것이 유감스럽기 때문에 C++ 표준은 적절한 종료를 보장하는 대체 메커니즘을 기술하고 있습니다.
자동 저장 기간이 있는 개체는 다음 함수의 프로그램에서 모두 삭제됩니다.
main()
하지 않고, 「」, 「」, 「」, 「」에 대해 실행합니다.합니다.exit()
는 직접 에 할 수main()
로 하다main()
struct exit_exception {
int c;
exit_exception(int c):c(c) { }
};
int main() {
try {
// put all code in here
} catch(exit_exception& e) {
exit(e.c);
}
}
「」를 호출하지 ,exit()
, 즉 코드를 throw exit_exception(exit_code);
★★★★★★ 。
abort를 지정하면 SIGABRT 신호가 전송되고 exit을 지정하면 일반 정리를 수행하는 응용 프로그램이 닫힙니다.
중단 신호는 원하는 방식으로 처리할 수 있지만 기본 동작은 오류 코드와 함께 응용 프로그램도 닫는 것입니다.
abort는 스태틱멤버 및 글로벌멤버 오브젝트 파괴를 실행하지 않지만 종료합니다.
물론 어플리케이션이 완전히 닫히면 OS는 메모리 및 기타 자원을 해방합니다.
중단 및 종료 프로그램 종료 시(기본 동작을 재정의하지 않은 경우) 반환 코드는 응용 프로그램을 시작한 상위 프로세스로 반환됩니다.
다음의 예를 참조해 주세요.
SomeClassType someobject;
void myProgramIsTerminating1(void)
{
cout<<"exit function 1"<<endl;
}
void myProgramIsTerminating2(void)
{
cout<<"exit function 2"<<endl;
}
int main(int argc, char**argv)
{
atexit (myProgramIsTerminating1);
atexit (myProgramIsTerminating2);
//abort();
return 0;
}
코멘트:
abort가 코멘트되지 않은 경우: 아무것도 인쇄되지 않고 일부 객체의 소멸자가 호출되지 않습니다.
abort가 위와 같이 코멘트 되어 있는 경우: 일부 오브젝트 디스트럭터가 호출됩니다.다음 출력이 표시됩니다.
function 2 료 22
function 1 수 exit
프로그램이 호출할 때 다음과 같은 일이 발생합니다.exit
) : ( ) :
-
atexit
이 - 있는 및 은 에 의해 생성됩니다.이치노
tmpfile
- 프로그램이 호스트에 대해 지정된 종료 코드로 종료됩니다.
그abort
() 함수가 송신하는 것은,SIGABRT
현재 프로세스에 신호를 보내는 경우, 프로그램이 종료되고 열린 스트림이 플러시/닫히거나 임시 파일이 생성된다는 보장이 없습니다.tmpfile
제거되었습니다.atexit
등록된 함수는 호출되지 않고 종료 상태가 0이 아닌 것이 호스트로 반환됩니다.
exit() 매뉴얼페이지에서 다음 순서를 수행합니다.
exit() 함수는 정상적인 프로세스 종료를 일으키고 status & 0377 값이 부모에게 반환됩니다.
abort() 매뉴얼페이지에서 다음 순서를 수행합니다.
abort()는 먼저 SIGABRT 신호의 차단을 해제한 후 호출 프로세스의 신호를 올립니다.이로 인해 SIGABRT 신호가 포착되어 신호 핸들러가 돌아오지 않는 한 프로세스가 비정상적으로 종료됩니다.
abort
송신하다SIGABRT
신호. abort
는 발신자에게 돌아오지 않습니다.의 디폴트 핸들러SIGABRT
signal을 지정하면 응용 프로그램이 닫힙니다. stdio
파일 스트림이 플러시된 후 닫힙니다.그러나 C++ 클래스 인스턴스의 소멸자는 그렇지 않습니다(이 예에서는 확실하지 않습니다.아마 결과가 정의되지 않았을 수 있습니다).
exit
자체 콜백이 있으며,atexit
콜백이 지정되어 있는 경우(또는1개만), 등록순서의 역순으로 호출됩니다(스택 등).프로그램은 종료됩니다.와 마찬가지로abort
,exit
는 발신자에게 돌아오지 않습니다. stdio
파일 스트림이 플러시된 후 닫힙니다.또한 C++ 클래스 인스턴스의 디스트럭터가 호출됩니다.
언급URL : https://stackoverflow.com/questions/397075/what-is-the-difference-between-exit-and-abort
'programing' 카테고리의 다른 글
ES6 모듈을 Vue 단일 파일 구성 요소로 가져올 수 없음 (0) | 2022.08.11 |
---|---|
마우스 오버를 구현하려면 어떻게 해야 합니까?마우스 오버를 구현하려면 어떻게 해야 합니까?VueJs에서요? (0) | 2022.08.11 |
Vue - 소품을 사용하여 컴포넌트에 클래스 이름 추가 (0) | 2022.08.11 |
홈 버튼처럼 작동하도록 뒤로 버튼 재정의 (0) | 2022.08.11 |
확장된 v-data-table이 Vuetify로 축소될 때 메서드 트리거 (0) | 2022.08.11 |