#ifndef interrupts_CC #define interrupts_CC #include #include #include bool continueJob=true; std::vector sSignal; void signalHandler(int signal) { std::string theSignal("Unknown"); if(signal<(int)sSignal.size()) theSignal=sSignal[signal]; std::cout << "Process " << getpid() << " received signal " << signal << " = " << theSignal << std::endl; std::cerr << "Process " << getpid() << " received signal " << signal << " = " << theSignal << std::endl; continueJob=false; } void defineSignals() { if(sSignal.size()==0) { sSignal.push_back("Unknown"); sSignal.push_back("SIGHUP"); sSignal.push_back("SIGINT"); sSignal.push_back("SIGQUIT"); sSignal.push_back("SIGILL"); sSignal.push_back("SIGTRAP"); sSignal.push_back("SIGABRT"); sSignal.push_back("SIGBUS"); sSignal.push_back("SIGFPE"); sSignal.push_back("SIGKILL"); sSignal.push_back("SIGUSR1"); sSignal.push_back("SIGSEGV"); sSignal.push_back("SIGUSR2"); sSignal.push_back("SIGPIPE"); sSignal.push_back("SIGALRM"); sSignal.push_back("SIGTERM"); sSignal.push_back("SIGSTKFLT"); sSignal.push_back("SIGCHLD"); sSignal.push_back("SIGCONT"); sSignal.push_back("SIGSTOP"); sSignal.push_back("SIGTSTP"); sSignal.push_back("SIGTTIN"); sSignal.push_back("SIGTTOU"); sSignal.push_back("SIGURG"); sSignal.push_back("SIGXCPU"); sSignal.push_back("SIGXFSZ"); sSignal.push_back("SIGVTALRM"); sSignal.push_back("SIGPROF"); sSignal.push_back("SIGWINCH"); sSignal.push_back("SIGPOLL"); sSignal.push_back("SIGPWR"); sSignal.push_back("SIGSYS"); sSignal.push_back("SIGRTMIN"); } } bool catchSignal(std::string sig) { defineSignals(); for(unsigned s(0);s vSig; vSig.push_back("SIGINT"); vSig.push_back("SIGUSR1"); vSig.push_back("SIGUSR2"); vSig.push_back("SIGTERM"); vSig.push_back("SIGXCPU"); */ defineSignals(); //BACKTRACE_AND_ASSERT(catchSignal("SIGINT")); // Catch signals, mainly for batch for(unsigned s(0);s