init: wait for orphaned children too while waiting

for sysinit-like processes (Harald Küthe <harald-tuxbox@arcor.de>)
This commit is contained in:
Denis Vlasenko 2008-01-04 15:10:47 +00:00
parent 4dada747e5
commit 21e20cb4ad

View File

@ -97,10 +97,16 @@ static const char *const environment[] = {
static void delete_init_action(struct init_action *a); static void delete_init_action(struct init_action *a);
static void halt_reboot_pwoff(int sig) ATTRIBUTE_NORETURN; static void halt_reboot_pwoff(int sig) ATTRIBUTE_NORETURN;
/* TODO: move to libbb? */ static void waitfor(pid_t pid)
static int waitfor(pid_t runpid)
{ {
return safe_waitpid(runpid, NULL, 0); /* waitfor(run(x)): protect against failed fork inside run() */
if (pid <= 0)
return;
/* Wait for any child (prevent zombies from exiting orphaned processes)
* but exit the loop only when specified one has exited. */
while (wait(NULL) != pid)
continue;
} }
static void loop_forever(void) ATTRIBUTE_NORETURN; static void loop_forever(void) ATTRIBUTE_NORETURN;