diff options
-rw-r--r-- | init/init.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/init/init.c b/init/init.c index 1f0bd4aec..657bad6cd 100644 --- a/init/init.c +++ b/init/init.c @@ -847,7 +847,14 @@ static void new_init_action(int action, char *command, const char *cons) } /* Append to the end of the list */ - for (a = init_action_list; a && a->next; a = a->next); + for (a = init_action_list; a && a->next; a = a->next) { + /* don't enter action if it's already in the list */ + if ((strcmp(a->command, command) == 0) && + (strcmp(a->terminal, cons) ==0)) { + free(new_action); + return; + } + } if (a) { a->next = new_action; } else { @@ -1022,7 +1029,14 @@ static void parse_inittab(void) #endif /* CONFIG_FEATURE_USE_INITTAB */ } - +static void reload_signal(int sig) +{ + message(LOG, "Reloading /etc/inittab"); + parse_inittab(); + run_actions(RESPAWN); + return; +} + extern int init_main(int argc, char **argv) { struct init_action *a; @@ -1120,6 +1134,9 @@ extern int init_main(int argc, char **argv) loop_forever(); } + /* Redefine SIGHUP to reread /etc/inittab */ + signal(SIGHUP, reload_signal); + /* Now run the looping stuff for the rest of forever */ while (1) { /* run the respawn stuff */ |