#include // alarm #include // now #include // signal raise #include // strsignal #include // cout endl class signal_handler { public: signal_handler(int _s, void (_f)(int)): s(_s) { signal(s, _f); } ~signal_handler() { signal(s, SIG_DFL); } private: int s; }; void f(int s) { auto now = std::chrono::system_clock::now(); auto time = std::chrono::system_clock::to_time_t(now); std::cout << strsignal(s) << " --> " << std::ctime(&time) << std::flush; } int main(int argc, char* argv[]) { int DIE = 5; signal_handler sigint (SIGINT , f); signal_handler sigusr1(SIGUSR1, f); signal_handler sigalrm(SIGALRM, [](int) { exit(EXIT_SUCCESS); }); alarm(DIE); // signal after DIE seconds std::cout << "I will die in " << DIE << " seconds :(" << std::endl; for(;;) { sleep(1); // can I escape this before 1 second? raise(SIGUSR1); } }