static void do_child_1(void) { pid_t pid; int i; for (i = 0; i < MAXKIDS; i++) { pid = SAFE_FORK(); if (pid == 0) { if (i == 0 || i == 1) do_exit(0); if (i == 2 || i == 3) do_compute(); if (i == 4 || i == 5) do_fork(); if (i == 6 || i == 7) do_sleep(); } fork_kid_pid[i] = pid; } TST_CHECKPOINT_WAKE2(0, MAXKIDS); if (TST_TRACE(reap_children(0, 0, fork_kid_pid, MAXKIDS))) return; tst_res(TPASS, "Test PASSED"); }
static void do_child_1(void) { pid_t pid, group; int i; int status; group = SAFE_GETPGID(0); for (i = 0; i < MAXKIDS; i++) { if (i == (MAXKIDS / 2)) SAFE_SETPGID(0, 0); pid = SAFE_FORK(); if (pid == 0) do_exit(0); fork_kid_pid[i] = pid; } if (TST_TRACE(waitpid_ret_test(0, &status, WNOHANG, 0, 0))) return; if (TST_TRACE(waitpid_ret_test(-group, &status, WNOHANG, 0, 0))) return; TST_CHECKPOINT_WAKE2(0, MAXKIDS); if (TST_TRACE(reap_children(0, WNOHANG, fork_kid_pid + (MAXKIDS / 2), MAXKIDS / 2))) return; if (TST_TRACE(reap_children(-group, WNOHANG, fork_kid_pid, MAXKIDS / 2))) return; tst_res(TPASS, "Test PASSED"); }
static void do_fork(void) { pid_t fork_pid; int i; TST_CHECKPOINT_WAIT(0); for (i = 0; i < 50; i++) { fork_pid = SAFE_FORK(); if (fork_pid == 0) exit(3); if (TST_TRACE(reap_children(fork_pid, 0, &fork_pid, 1))) break; } exit(3); }