halt/reboot/poweroff: add a CONFIG_xxx to act SysV compatibly
Signed-off-by: Alexander Shishkin <virtuoso@slind.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d1090c91cc
commit
97af2ff8ca
@ -93,6 +93,26 @@ config HALT
|
||||
help
|
||||
Stop all processes and either halt, reboot, or power off the system.
|
||||
|
||||
config FEATURE_CALL_TELINIT
|
||||
bool "Call telinit on shutdown and reboot"
|
||||
default n
|
||||
depends on HALT && !INIT
|
||||
help
|
||||
Call an external program (normally telinit) to facilitate
|
||||
a switch to a proper runlevel.
|
||||
|
||||
This option is only available if you selected halt and friends,
|
||||
but did not select init.
|
||||
|
||||
config TELINIT_PATH
|
||||
string "Path to telinit executable"
|
||||
default "/sbin/telinit"
|
||||
depends on FEATURE_CALL_TELINIT
|
||||
help
|
||||
When busybox halt and friends have to call external telinit
|
||||
to facilitate proper shutdown, this path is to be used when
|
||||
locating telinit executable.
|
||||
|
||||
config MESG
|
||||
bool "mesg"
|
||||
default n
|
||||
|
18
init/halt.c
18
init/halt.c
@ -85,6 +85,8 @@ int halt_main(int argc UNUSED_PARAM, char **argv)
|
||||
//TODO: I tend to think that signalling linuxrc is wrong
|
||||
// pity original author didn't comment on it...
|
||||
if (ENABLE_FEATURE_INITRD) {
|
||||
/* talk to linuxrc */
|
||||
/* bbox init/linuxrc assumed */
|
||||
pid_t *pidlist = find_pid_by_name("linuxrc");
|
||||
if (pidlist[0] > 0)
|
||||
rc = kill(pidlist[0], signals[which]);
|
||||
@ -92,7 +94,21 @@ int halt_main(int argc UNUSED_PARAM, char **argv)
|
||||
free(pidlist);
|
||||
}
|
||||
if (rc) {
|
||||
rc = kill(1, signals[which]);
|
||||
/* talk to init */
|
||||
if (!ENABLE_FEATURE_CALL_TELINIT) {
|
||||
/* bbox init assumed */
|
||||
rc = kill(1, signals[which]);
|
||||
} else {
|
||||
/* SysV style init assumed */
|
||||
/* runlevels:
|
||||
* 0 == shutdown
|
||||
* 6 == reboot */
|
||||
rc = execlp(CONFIG_TELINIT_PATH,
|
||||
CONFIG_TELINIT_PATH,
|
||||
which == 2 ? "6" : "0",
|
||||
(char *)NULL
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rc = reboot(magic[which]);
|
||||
|
Loading…
Reference in New Issue
Block a user