SignalHandler.hpp
Go to the documentation of this file.
1 
5 #pragma once
6 
7 #include <csignal>
8 #include <functional>
9 #include <list>
10 #include <map>
11 #include <mutex>
12 
13 namespace signal_handler
14 {
21 {
22 public:
23  SignalHandler() = delete;
24 
25  using Handler = std::function<void(int)>;
26 
27  template <typename T>
28  static void bind(int signal, void (T::*fp)(int), T* object)
29  {
30  SignalHandler::bind(signal, std::bind(fp, object, std::placeholders::_1));
31  }
32 
33  static void bind(int signal, const Handler& handler);
34 
35  template <typename T>
36  static void bindAll(void (T::*fp)(int), T* object)
37  {
38  const Handler handler = std::bind(fp, object, std::placeholders::_1);
39  SignalHandler::bind(SIGINT, handler);
40  SignalHandler::bind(SIGTERM, handler); // shell command kill
41  SignalHandler::bind(SIGABRT, handler); // invoked by abort();
42  SignalHandler::bind(SIGFPE, handler);
43  SignalHandler::bind(SIGILL, handler);
44  SignalHandler::bind(SIGQUIT, handler); // the QUIT character, usually C-'\'
45  SignalHandler::bind(SIGHUP, handler); // hang-up” signal is used to report that the user’s terminal is disconnected
46  // SIGKILL cannot be handled
47  }
48 
49  template <typename T>
50  static void unbind(int signal, void (T::*fp)(int), T* object)
51  {
52  SignalHandler::unbind(signal, std::bind(fp, object, std::placeholders::_1));
53  }
54 
55  static void unbind(int signal, const Handler& handler);
56 
57  template <typename T>
58  static void unbindAll(void (T::*fp)(int), T* object)
59  {
60  const Handler handler = std::bind(fp, object, std::placeholders::_1);
61  SignalHandler::unbind(SIGINT, handler);
62  SignalHandler::unbind(SIGTERM, handler);
63  SignalHandler::unbind(SIGABRT, handler);
64  SignalHandler::unbind(SIGFPE, handler);
65  SignalHandler::unbind(SIGILL, handler);
66  SignalHandler::unbind(SIGQUIT, handler);
67  SignalHandler::unbind(SIGHUP, handler);
68  }
69 
70 private:
71  static std::map<int, std::list<Handler> > handlers_;
72  static std::mutex mutex_;
73 
74  static void signaled(int signal);
75 };
76 
77 } // namespace signal_handler
signal_handler::SignalHandler
Signal handling.
Definition: SignalHandler.hpp:20
signal_handler::SignalHandler::SignalHandler
SignalHandler()=delete
signal_handler::SignalHandler::unbind
static void unbind(int signal, void(T::*fp)(int), T *object)
Definition: SignalHandler.hpp:50
signal_handler::SignalHandler::mutex_
static std::mutex mutex_
Definition: SignalHandler.hpp:72
signal_handler::SignalHandler::handlers_
static std::map< int, std::list< Handler > > handlers_
Definition: SignalHandler.hpp:71
signal_handler::SignalHandler::unbindAll
static void unbindAll(void(T::*fp)(int), T *object)
Definition: SignalHandler.hpp:58
signal_handler::SignalHandler::bind
static void bind(int signal, void(T::*fp)(int), T *object)
Definition: SignalHandler.hpp:28
signal_handler::SignalHandler::bindAll
static void bindAll(void(T::*fp)(int), T *object)
Definition: SignalHandler.hpp:36
signal_handler::SignalHandler::Handler
std::function< void(int)> Handler
Definition: SignalHandler.hpp:25
signal_handler::SignalHandler::signaled
static void signaled(int signal)
Definition: SignalHandler.cpp:65
signal_handler
Definition: SignalHandler.hpp:13


bota_signal_handler
Author(s):
autogenerated on Sat Apr 15 2023 02:53:49