hush: make it ignore SIGINT etc in a config wich has no job control

This commit is contained in:
Denis Vlasenko 2008-05-25 21:50:55 +00:00
parent af6cca50af
commit 4830fc565a

View File

@ -698,9 +698,18 @@ static const struct built_in_command bltins[] = {
BLTIN(NULL, NULL, NULL) BLTIN(NULL, NULL, NULL)
}; };
/* Signals are grouped, we handle them in batches */
static void set_misc_sighandler(void (*handler)(int))
{
bb_signals(0
+ (1 << SIGINT)
+ (1 << SIGQUIT)
+ (1 << SIGTERM)
, handler);
}
#if ENABLE_HUSH_JOB #if ENABLE_HUSH_JOB
/* Signals are grouped, we handle them in batches */
static void set_fatal_sighandler(void (*handler)(int)) static void set_fatal_sighandler(void (*handler)(int))
{ {
bb_signals(0 bb_signals(0
@ -724,14 +733,6 @@ static void set_jobctrl_sighandler(void (*handler)(int))
+ (1 << SIGTTOU) + (1 << SIGTTOU)
, handler); , handler);
} }
static void set_misc_sighandler(void (*handler)(int))
{
bb_signals(0
+ (1 << SIGINT)
+ (1 << SIGQUIT)
+ (1 << SIGTERM)
, handler);
}
/* SIGCHLD is special and handled separately */ /* SIGCHLD is special and handled separately */
static void set_every_sighandler(void (*handler)(int)) static void set_every_sighandler(void (*handler)(int))
@ -814,7 +815,6 @@ static void hush_exit(int exitcode)
#define set_fatal_sighandler(handler) ((void)0) #define set_fatal_sighandler(handler) ((void)0)
#define set_jobctrl_sighandler(handler) ((void)0) #define set_jobctrl_sighandler(handler) ((void)0)
#define set_misc_sighandler(handler) ((void)0)
#define hush_exit(e) exit(e) #define hush_exit(e) exit(e)
#endif /* JOB */ #endif /* JOB */
@ -3906,8 +3906,10 @@ int hush_main(int argc, char **argv)
/* give up */ /* give up */
interactive_fd = 0; interactive_fd = 0;
} }
if (interactive_fd) if (interactive_fd) {
fcntl(interactive_fd, F_SETFD, FD_CLOEXEC); fcntl(interactive_fd, F_SETFD, FD_CLOEXEC);
set_misc_sighandler(SIG_IGN);
}
} }
#endif #endif