X-Git-Url: http://git.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=inittab.c;fp=inittab.c;h=128268a03fdbd2163210007a555a8bfe2ef82dee;hp=b2ffc9a25e5fc69aa6a581002331c3ab93c1cc3f;hb=01ac2c4500cb0c7934640e6d2e5f99b08483bdf4;hpb=87b583635475c56ae5b8ec89233f6f292ba09765 diff --git a/inittab.c b/inittab.c index b2ffc9a..128268a 100644 --- a/inittab.c +++ b/inittab.c @@ -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