Могу ли я бросить исключение из обработчика сигнала SIGSEGV так напримет( пример не работает поэтому и спрашиваю )
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
//#include <bits/sigaction.h>
#include <ucontext.h>
#include <iostream>
using namespace std;
//typedef void (*sa_sigaction)(int, siginfo_t *, void *);
void sigsegv_handler( int f_Sig, siginfo_t* f_SigInfo, void* f_Context )
{
cout << "PID = " << getpid() << endl;
std::cerr << "Segmentation violation " << std::endl;
throw 62;
}
int main( int ac, char* av[] )
{
struct sigaction snew;
struct sigaction sold;
snew.sa_sigaction = sigsegv_handler;
sigemptyset( &snew.sa_mask );
snew.sa_flags = SA_SIGINFO;
if( sigaction( SIGSEGV, &snew, &sold ) < 0 ){
std::cerr << "Set signal routine is faled."<< std::endl;
return 1;
}
else {
try{
cout << "PID = " << getpid() << endl;
(*( int* )0 ) = 0;
}
catch( int i ){
std::cerr << i << std::endl;
}
catch(...){
std::cerr << "To caught exception.." << std::endl;
}
}
sigaction( SIGSEGV, &sold, &snew );
return 0;
}