Сигналы и исключения не связаны друг с другом.То, что вы используете (генерируете исключения из асинхронных обработчиков сигналов), переносимо только между несколькими компиляторами, которые его поддерживают, такими как GCC и Intel C / C ++ с -fnon-call-exceptions
.
Тем не менее, то, что вы забылиdo разблокирует сигнал: когда выполняется обработчик сигнала, доставка того же сигнала блокируется, и он не блокируется при выходе из обработчика сигнала через исключение.Измените обработчик сигнала следующим образом:
void SigactionHookHandler( int iSignal, siginfo_t * psSiginfo, void * psContext
{
cout << "Signal Handler Exception Caught: std::exception -- signal : " << iSignal << " from SigactionHookHandler()" << endl;
sigset_t x;
sigemptyset (&x);
sigaddset(&x, SIGSEGV);
sigprocmask(SIG_UNBLOCK, &x, NULL);
throw std::exception();
}