diff options
author | Isaac Dunham <ibid.ag@gmail.com> | 2015-08-05 21:33:43 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2015-08-05 21:33:43 -0500 |
commit | a12eec740dc6d0c533fb7d83a0a54de6d3abb17c (patch) | |
tree | 91faf8dbe95712c786c33ec20e9c96eba1748318 /toys/other/reboot.c | |
parent | 5f225ca241cd927ebf148d714ab7e1f69461522c (diff) | |
download | toybox-a12eec740dc6d0c533fb7d83a0a54de6d3abb17c.tar.gz |
reboot: signal init, add -f option to call reboot();
init: use SIGINT, use xsignal()
Now that oneit supports the same signals as our "sysv"-init for shutdown,
make reboot et al. signal pid 1 with the appropriate signal.
Of these signals, only SIGINT works with sysvinit 2.88, causing a reboot.
The others are only supported in Busybox init.
Also, make init accept SIGINT and use xsignal().
Diffstat (limited to 'toys/other/reboot.c')
-rw-r--r-- | toys/other/reboot.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/toys/other/reboot.c b/toys/other/reboot.c index a1358886..9193ba4e 100644 --- a/toys/other/reboot.c +++ b/toys/other/reboot.c @@ -2,7 +2,7 @@ * * Copyright 2013 Elie De Brauwer <eliedebrauwer@gmail.com> -USE_REBOOT(NEWTOY(reboot, "n", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_REBOOT(NEWTOY(reboot, "fn", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) @@ -10,10 +10,11 @@ config REBOOT bool "reboot" default y help - usage: reboot/halt/poweroff [-n] + usage: reboot/halt/poweroff [-fn] Restart, halt or powerdown the system. + -f Don't signal init -n Don't sync before stopping the system. */ @@ -24,8 +25,12 @@ config REBOOT void reboot_main(void) { int types[] = {RB_AUTOBOOT, RB_HALT_SYSTEM, RB_POWER_OFF}; + int sigs[] = {SIGINT, SIGUSR1, SIGUSR2}; if (!(toys.optflags & FLAG_n)) sync(); - toys.exitval = reboot(types[stridx("hp", *toys.which->name)+1]); + if (toys.optflags & FLAG_f) + toys.exitval = reboot(types[stridx("hp", *toys.which->name)+1]); + else + toys.exitval = kill(1, sigs[stridx("hp", *toys.which->name)+1]); } |