80#ifdef HAVE_DECL_SYS_SIGLIST
81 printf(
_(
"Caught signal %d (%s) ... Exiting\n"), sig, sys_siglist[sig]);
82#elif (defined(__sun__) && defined(__svr4__))
83 printf(
_(
"Caught signal %d (%s) ... Exiting\n"), sig, _sys_siglist[sig]);
84#elif (defined(__alpha) && defined(__osf__))
85 printf(
_(
"Caught signal %d (%s) ... Exiting\n"), sig, __sys_siglist[sig]);
87 printf(
_(
"Caught signal %d ... Exiting\n"), sig);
112 struct sigaction act = { 0 };
114 sigemptyset(&act.sa_mask);
116 act.sa_handler = SIG_IGN;
117 sigaction(SIGPIPE, &act, NULL);
120 sigaction(SIGSEGV, &act, NULL);
123 sigaction(SIGTERM, &act, NULL);
124 sigaction(SIGHUP, &act, NULL);
125 sigaction(SIGQUIT, &act, NULL);
128 sigaddset(&act.sa_mask, SIGTSTP);
135 sigaction(SIGALRM, &act, NULL);
139 act.sa_flags = SA_RESTART;
142 sigaction(SIGCONT, &act, NULL);
143 sigaction(SIGTSTP, &act, NULL);
144 sigaction(SIGINT, &act, NULL);
145 sigaction(SIGWINCH, &act, NULL);
151 sigemptyset(&act.sa_mask);
153 act.sa_flags |= SA_NOCLDSTOP;
154 sigaction(SIGCHLD, &act, NULL);
169 sigaddset(&
Sigset, SIGTERM);
170 sigaddset(&
Sigset, SIGHUP);
171 sigaddset(&
Sigset, SIGTSTP);
172 sigaddset(&
Sigset, SIGINT);
173 sigaddset(&
Sigset, SIGWINCH);
174 sigprocmask(SIG_BLOCK, &
Sigset, 0);
186 sigprocmask(SIG_UNBLOCK, &
Sigset, 0);
201 struct sigaction sa = { 0 };
204 sa.sa_handler = SIG_IGN;
206 sigemptyset(&sa.sa_mask);
225 sigprocmask(SIG_UNBLOCK, &
SigsetSys, NULL);
233 struct sigaction sa = { 0 };
235 sa.sa_handler = SIG_DFL;
236 sigemptyset(&sa.sa_mask);
238 sigaction(SIGQUIT, &sa, NULL);
239 sigaction(SIGINT, &sa, NULL);
253 struct sigaction sa = { 0 };
258 sa.sa_flags |= SA_RESTART;
260 sigaction(SIGINT, &sa, NULL);
void(* sig_handler_t)(int sig)
void mutt_sig_init(sig_handler_t sig_fn, sig_handler_t exit_fn, sig_handler_t segv_fn)
Initialise the signal handling.
static bool SysSignalsBlocked
true when system signals are blocked, e.g.
static sig_handler_t ExitHandler
Function to handle SIGTERM (15), SIGHUP (1), SIGQUIT (3) signals.
static sig_handler_t SigHandler
Function to handle other signals, e.g. SIGINT (2)
static struct sigaction SysOldQuit
Backup of SIGQUIT handler, when mutt_sig_block_system() is called.
void mutt_sig_empty_handler(int sig)
Dummy signal handler.
static sigset_t Sigset
A set of signals used by mutt_sig_block(), mutt_sig_unblock()
void mutt_sig_block_system(void)
Block signals before calling exec()
void mutt_sig_block(void)
Block signals during critical operations.
void mutt_sig_unblock(void)
Restore previously blocked signals.
static bool SignalsBlocked
true when signals are blocked, e.g.
static sig_handler_t SegvHandler
Function to handle SIGSEGV (11) signals.
static sigset_t SigsetSys
A set of signals used by mutt_sig_block_system(), mutt_sig_unblock_system()
void mutt_sig_unblock_system(bool restore)
Restore previously blocked signals.
static struct sigaction SysOldInt
Backup of SIGINT handler, when mutt_sig_block_system() is called.
void mutt_sig_allow_interrupt(bool allow)
Allow/disallow Ctrl-C (SIGINT)
void mutt_sig_exit_handler(int sig)
Notify the user and shutdown gracefully.