programing

exit()와 abort()의 차이점은 무엇입니까?

luckcodes 2022. 8. 11. 22:06

exit()와 abort()의 차이점은 무엇입니까?

와 C에서는 C++의 차이는 입니까?exit() ★★★★★★★★★★★★★★★★★」abort()에러 후에 프로그램을 종료하려고 합니다(예외는 아닙니다).

abort() 프로그램을 종료하기 전에 먼저 를 사용하여 등록된 함수를 호출하지 않고 오브젝트의 소멸자를 호출하지 않고 종료합니다.단, 자동 객체에 대해서는 소멸자를 호출하지 않습니다.그렇게

A a;
void test() { 
    static A b;
    A c;
    exit(0);
}

a ★★★★★★★★★★★★★★★★★」b 단, 「」, 「파괴자」는 호출하지 .cabort()은 다음과 같은 적절한종료를 이것이 유감스럽기 때문에 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는 발신자에게 돌아오지 않습니다.의 디폴트 핸들러SIGABRTsignal을 지정하면 응용 프로그램이 닫힙니다. stdio파일 스트림이 플러시된 후 닫힙니다.그러나 C++ 클래스 인스턴스의 소멸자는 그렇지 않습니다(이 예에서는 확실하지 않습니다.아마 결과가 정의되지 않았을 수 있습니다).

exit자체 콜백이 있으며,atexit콜백이 지정되어 있는 경우(또는1개만), 등록순서의 역순으로 호출됩니다(스택 등).프로그램은 종료됩니다.와 마찬가지로abort,exit는 발신자에게 돌아오지 않습니다. stdio파일 스트림이 플러시된 후 닫힙니다.또한 C++ 클래스 인스턴스의 디스트럭터가 호출됩니다.

언급URL : https://stackoverflow.com/questions/397075/what-is-the-difference-between-exit-and-abort