여기에 SIGABRT
신호에 대한 처리기를 설정 한 코드가 있는데 abort()
을 호출하지만 처리기가 trigered되지 않고 대신 프로그램이 중단됩니다. 그 이유는 무엇입니까?SIGABRT 신호를 처리하는 방법은 무엇입니까?
#include <iostream>
#include <csignal>
using namespace std;
void Triger(int x)
{
cout << "Function triger" << endl;
}
int main()
{
signal(SIGABRT, Triger);
abort();
cin.ignore();
return 0;
}
프로그램 출력은 : 당신이 핸들러에주의를 지불 SIGABRT
및 abort()
에 대한 핸들러를 대체 할 수 있지만
작품을 예상대로는 메시지가 여기에 ''이 포함 된 후. 어떤 플랫폼? –
MSVC++ 2010이 설치된 Windows 7 x64 (Visual Studio에 cstdlib를 포함 할 필요가 없음) – codekiddy
신호 처리기가 'longjmp'를 수행하지 않으면 프로그램을 중단해야합니다. 그 전에 메시지를 출력하고 싶다면,'std :: cout'을 플러시 (또는'std :: cerr'에 쓰기)하고 싶을 것이다. –