mirror of
https://github.com/sheumann/hush.git
synced 2024-12-21 23:29:34 +00:00
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
|
help
|
||||||
Stop all processes and either halt, reboot, or power off the system.
|
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
|
config MESG
|
||||||
bool "mesg"
|
bool "mesg"
|
||||||
default n
|
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
|
//TODO: I tend to think that signalling linuxrc is wrong
|
||||||
// pity original author didn't comment on it...
|
// pity original author didn't comment on it...
|
||||||
if (ENABLE_FEATURE_INITRD) {
|
if (ENABLE_FEATURE_INITRD) {
|
||||||
|
/* talk to linuxrc */
|
||||||
|
/* bbox init/linuxrc assumed */
|
||||||
pid_t *pidlist = find_pid_by_name("linuxrc");
|
pid_t *pidlist = find_pid_by_name("linuxrc");
|
||||||
if (pidlist[0] > 0)
|
if (pidlist[0] > 0)
|
||||||
rc = kill(pidlist[0], signals[which]);
|
rc = kill(pidlist[0], signals[which]);
|
||||||
@ -92,7 +94,21 @@ int halt_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
free(pidlist);
|
free(pidlist);
|
||||||
}
|
}
|
||||||
if (rc) {
|
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 {
|
} else {
|
||||||
rc = reboot(magic[which]);
|
rc = reboot(magic[which]);
|
||||||
|
Loading…
Reference in New Issue
Block a user