13SignalInformation::SignalInformation() : terminate(false), lastSignal(0) {}
15SignalInformation::~SignalInformation() {
36 std::cerr <<
"ERROR: The program received signal " << signal <<
" and will be aborted in " <<
maxWaitTime <<
"s.\n";
37 SignalInformation::infos().setTerminate(
true);
39 SignalInformation::infos().setErrorCode(signal);
45 if (SignalInformation::infos().getErrorCode() == SIGXCPU) {
46 std::cerr <<
"TIMEOUT.\n";
47 }
else if (SignalInformation::infos().getErrorCode() == ENOMEM) {
48 std::cerr <<
"OUT OF MEMORY.\n";
49 }
else if (SignalInformation::infos().getErrorCode() == SIGABRT || SignalInformation::infos().getErrorCode() == SIGINT) {
50 std::cerr <<
"ABORT.\n";
52 std::cerr <<
"Received signal " << signal <<
'\n';
65 sigemptyset(&sa.sa_mask);
66 sa.sa_flags = SA_RESTART;
69 if (sigaction(SIGXCPU, &sa,
nullptr) == -1) {
70 std::cerr <<
"FATAL: Installing a signal handler failed.\n";
73 if (sigaction(ENOMEM, &sa,
nullptr) == -1) {
74 std::cerr <<
"FATAL: Installing a signal handler failed.\n";
76 if (sigaction(SIGSEGV, &sa,
nullptr) == -1) {
77 std::cerr <<
"FATAL: Installing a signal handler failed.\n";
79 if (sigaction(SIGABRT, &sa,
nullptr) == -1) {
80 std::cerr <<
"FATAL: Installing a signal handler failed.\n";
82 if (sigaction(SIGINT, &sa,
nullptr) == -1) {
83 std::cerr <<
"FATAL: Installing a signal handler failed.\n";
85 if (sigaction(SIGTERM, &sa,
nullptr) == -1) {
86 std::cerr <<
"FATAL: Installing a signal handler failed.\n";
88 if (sigaction(SIGALRM, &sa,
nullptr) == -1) {
89 std::cerr <<
"FATAL: Installing a signal handler failed.\n";
void quickest_exit(int errorCode)
Exit without cleanup.
void setTimeoutAlarm(uint_fast64_t timeout)
Set timeout by raising an alarm after timeout seconds.
void signalHandler(int signal)
Signal handler for aborts, etc.
bool isTerminate()
Check whether the program should terminate (due to some abort signal).
void installSignalHandler(int maximalWaitTime)
Register some signal handlers to detect and correctly handle abortion (due to timeout for example).