私はSIGABRT
シグナルのハンドラを設定した後、abort()
をコールしますが、ハンドラはトリガされず、プログラムは中止されます。なぜですか?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(ビジュアルスタジオにcstdlibを含める必要はありません) – codekiddy
シグナルハンドラが 'longjmp'をしない限り、プログラムを中止する必要があります。その前にメッセージを出力したい場合は、 'std :: cout'をフラッシュする(または' std :: cerr'に書き込む)ことができます。 –