runsvdir: if pid==1, also intercept SIGINT for -s SCRIPT
function old new delta runsvdir_main 1057 1064 +7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
dac8d80f77
commit
7db2a7c20e
@ -222,6 +222,7 @@ int runsvdir_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
unsigned stampcheck;
|
unsigned stampcheck;
|
||||||
int i;
|
int i;
|
||||||
int need_rescan;
|
int need_rescan;
|
||||||
|
bool i_am_init;
|
||||||
char *opt_s_argv[3];
|
char *opt_s_argv[3];
|
||||||
|
|
||||||
INIT_G();
|
INIT_G();
|
||||||
@ -232,18 +233,21 @@ int runsvdir_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
getopt32(argv, "Ps:", &opt_s_argv[0]);
|
getopt32(argv, "Ps:", &opt_s_argv[0]);
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
|
i_am_init = (getpid() == 1);
|
||||||
bb_signals(0
|
bb_signals(0
|
||||||
| (1 << SIGTERM)
|
| (1 << SIGTERM)
|
||||||
| (1 << SIGHUP)
|
| (1 << SIGHUP)
|
||||||
/* For busybox's init, SIGTERM == reboot,
|
/* For busybox's init, SIGTERM == reboot,
|
||||||
* SIGUSR1 == halt
|
* SIGUSR1 == halt,
|
||||||
* SIGUSR2 == poweroff
|
* SIGUSR2 == poweroff,
|
||||||
* so we need to intercept SIGUSRn too.
|
* Ctlr-ALt-Del sends SIGINT to init,
|
||||||
|
* so we need to intercept SIGUSRn and SIGINT too.
|
||||||
* Note that we do not implement actual reboot
|
* Note that we do not implement actual reboot
|
||||||
* (killall(TERM) + umount, etc), we just pause
|
* (killall(TERM) + umount, etc), we just pause
|
||||||
* respawing and avoid exiting (-> making kernel oops).
|
* respawing and avoid exiting (-> making kernel oops).
|
||||||
* The user is responsible for the rest. */
|
* The user is responsible for the rest.
|
||||||
| (getpid() == 1 ? ((1 << SIGUSR1) | (1 << SIGUSR2)) : 0)
|
*/
|
||||||
|
| (i_am_init ? ((1 << SIGUSR1) | (1 << SIGUSR2) | (1 << SIGINT)) : 0)
|
||||||
, record_signo);
|
, record_signo);
|
||||||
svdir = *argv++;
|
svdir = *argv++;
|
||||||
|
|
||||||
@ -394,7 +398,7 @@ int runsvdir_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
/* SIGHUP or SIGTERM (or SIGUSRn if we are init) */
|
/* SIGHUP or SIGTERM (or SIGUSRn if we are init) */
|
||||||
/* Exit unless we are init */
|
/* Exit unless we are init */
|
||||||
if (getpid() != 1)
|
if (!i_am_init)
|
||||||
return (SIGHUP == sig) ? 111 : EXIT_SUCCESS;
|
return (SIGHUP == sig) ? 111 : EXIT_SUCCESS;
|
||||||
|
|
||||||
/* init continues to monitor services forever */
|
/* init continues to monitor services forever */
|
||||||
|
Loading…
Reference in New Issue
Block a user