aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toys/pending/init.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/toys/pending/init.c b/toys/pending/init.c
index 64b61481..b147911f 100644
--- a/toys/pending/init.c
+++ b/toys/pending/init.c
@@ -188,6 +188,25 @@ static void inittab_parsing(void)
}
}
+static void reload_inittab(void)
+{
+ // Remove all inactive actions, then reload /etc/inittab
+ struct action_list_seed **y;
+ y = &action_list_pointer;
+ while (*y) {
+ if (!(*y)->pid) {
+ struct action_list_seed *x = *y;
+ free(x->terminal_name);
+ free(x->command);
+ *y = (*y)->next;
+ free(x);
+ continue;
+ }
+ y = &(*y)->next;
+ }
+ inittab_parsing();
+}
+
static void run_command(char *command)
{
char *final_command[128];
@@ -405,7 +424,7 @@ static void restart_init_handler(int sig_no)
static void catch_signal(int sig_no)
{
caught_signal = sig_no;
- error_msg("signal seen");
+ error_msg("signal seen: %d", sig_no);
}
static void pause_handler(int sig_no)
@@ -439,6 +458,10 @@ static int check_if_pending_signals(void)
caught_signal = 0;
signal_caught = 1;
if (sig == SIGINT) run_action_from_list(CTRLALTDEL);
+ else if (sig == SIGHUP) {
+ error_msg("reloading inittab");
+ reload_inittab();
+ }
}
}