28 #include <utils/system/signal.h> 63 SignalManager *SignalManager::instance_ = NULL;
64 SignalHandler *SignalManager::signal_handlers_[NSIG];
67 SignalManager::SignalManager()
72 SignalManager::SignalManager(
const SignalManager &cc)
82 if (instance_ == NULL) {
84 for (
unsigned int i = 0; i < NSIG; ++i) {
85 signal_handlers_[i] = NULL;
98 if (instance_ != NULL) {
99 for (
unsigned int i = 0; i < NSIG; ++i) {
117 signal_handlers_[signum] = handler;
121 sa.sa_handler = SignalManager::dispatcher;
122 sigemptyset(&sa.sa_mask);
124 sigaction(signum, &sa, 0);
138 restore_default(signum);
148 for (
unsigned int i = 0; i < NSIG; ++i) {
149 if (signal_handlers_[i] == handler) {
156 SignalManager::restore_default(
int signum)
159 signal_handlers_[signum] = NULL;
163 sa.sa_handler = SIG_DFL;
164 sigemptyset(&sa.sa_mask);
166 sigaction(signum, &sa, 0);
177 signal_handlers_[signum] = NULL;
181 sa.sa_handler = SIG_IGN;
182 sigemptyset(&sa.sa_mask);
184 sigaction(signum, &sa, 0);
192 SignalManager::dispatcher(
int signum)
194 if (signal_handlers_[signum] != NULL) {
static void finalize()
Finalize (and free) the SignalManager instance, this does NOT implicitly delete the signal handlers,...
virtual void handle_signal(int signal)=0
Signal hanlding method.
Fawkes library namespace.
Interface for signal handling.
static SignalManager * instance()
Get the SignalManager instance.
static void ignore(int signum)
Ignore a signal.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
static void unregister_handler(int signum)
Unregister a SignalHandler for a signal.