1 #ifndef UNIX_CATCHER_HPP
2 #define UNIX_CATCHER_HPP
3 
4 #if defined(Q_OS_UNIX)
5 #include <QCoreApplication>
6 #include <signal.h>
7 #include <unistd.h>
8 
9 ///////////////////////////////////////////////////////////////////////////////
catchUnixSignals(const std::vector<int> & quitSignals,const std::vector<int> & ignoreSignals=std::vector<int> ())10 void catchUnixSignals(const std::vector<int>& quitSignals,
11                       const std::vector<int>& ignoreSignals = std::vector<int>()) {
12 
13     auto handler = [](int sig) ->void {
14         printf("\nquit the application (user request signal = %d).\n", sig);
15         QCoreApplication::quit();
16     };
17 
18     for ( int sig : ignoreSignals )
19         signal(sig, SIG_IGN);
20 
21     for ( int sig : quitSignals )
22         signal(sig, handler);
23 }
24 ///////////////////////////////////////////////////////////////////////////////
25 
26 #endif // Q_OS_UNIX
27 
28 #endif // UNIX_CATCHER_HPP
29