diff options
author | Daniel Golle <daniel@makrotopia.org> | 2021-11-16 03:06:36 +0000 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2021-11-23 13:56:52 +0000 |
commit | 01ac2c4500cb0c7934640e6d2e5f99b08483bdf4 (patch) | |
tree | af161e1623617cf483b9358fcce2e72d667bcdb4 | |
parent | 87b583635475c56ae5b8ec89233f6f292ba09765 (diff) | |
download | procd-01ac2c4500cb0c7934640e6d2e5f99b08483bdf4.tar.gz |
procd: service_stop_all: also kill inittab actions
Also send SIGKILL to all actions spawned by inittab.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rw-r--r-- | inittab.c | 14 | ||||
-rw-r--r-- | procd.h | 1 | ||||
-rw-r--r-- | service/service.c | 2 |
3 files changed, 16 insertions, 1 deletions
@@ -123,6 +123,9 @@ static void child_exit(struct uloop_process *proc, int ret) DEBUG(4, "pid:%d, exitcode:%d\n", proc->pid, ret); proc->pid = 0; + if (a->respawn < 0) + return; + if (!dev_exist(a->id)) { DEBUG(4, "Skipping respawn: device '%s' does not exist anymore\n", a->id); return; @@ -293,6 +296,17 @@ void procd_inittab_run(const char *handler) } } +void procd_inittab_kill(void) +{ + struct init_action *a; + + list_for_each_entry(a, &actions, list) { + a->respawn = -1; + if (a->proc.pid) + kill(a->proc.pid, SIGKILL); + } +} + void procd_inittab(void) { #define LINE_LEN 128 @@ -43,6 +43,7 @@ void procd_signal(void); void procd_signal_preinit(void); void procd_inittab(void); void procd_inittab_run(const char *action); +void procd_inittab_kill(void); void procd_bcast_event(char *event, struct blob_attr *msg); struct trigger; diff --git a/service/service.c b/service/service.c index 5c66fb2..bb3e121 100644 --- a/service/service.c +++ b/service/service.c @@ -676,7 +676,7 @@ service_stop_all(void) service_avl_stop_all(&containers, &term_timeout); service_avl_stop_all(&services, &term_timeout); - /* ToDo: inittab */ + procd_inittab_kill(); sleep(term_timeout); } |