aboutsummaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/Config.in1
-rw-r--r--init/init.c18
2 files changed, 10 insertions, 9 deletions
diff --git a/init/Config.in b/init/Config.in
index 6b5799fe3..395c9e2f3 100644
--- a/init/Config.in
+++ b/init/Config.in
@@ -32,6 +32,7 @@ config FEATURE_KILL_DELAY
int "How long to wait between TERM and KILL (0 - send TERM only)" if FEATURE_KILL_REMOVED
range 0 1024
default 0
+ depends on FEATURE_KILL_REMOVED
help
With nonzero setting, init sends TERM, forks, child waits N
seconds, sends KILL and exits. Setting it too high is unwise
diff --git a/init/init.c b/init/init.c
index 59d070950..ed01e71c0 100644
--- a/init/init.c
+++ b/init/init.c
@@ -780,16 +780,16 @@ static void reload_inittab(void)
for (a = init_action_list; a; a = a->next)
if (a->pid != 0)
kill(a->pid, SIGTERM);
-#if CONFIG_FEATURE_KILL_DELAY
- /* NB: parent will wait in NOMMU case */
- if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
- sleep(CONFIG_FEATURE_KILL_DELAY);
- for (a = init_action_list; a; a = a->next)
- if (a->pid != 0)
- kill(a->pid, SIGKILL);
- _exit(EXIT_SUCCESS);
+ if (CONFIG_FEATURE_KILL_DELAY) {
+ /* NB: parent will wait in NOMMU case */
+ if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
+ sleep(CONFIG_FEATURE_KILL_DELAY);
+ for (a = init_action_list; a; a = a->next)
+ if (a->pid != 0)
+ kill(a->pid, SIGKILL);
+ _exit(EXIT_SUCCESS);
+ }
}
-#endif
}
/* Remove old and unused entries */