1865695bbc89088b9526ea9045410e5afb70a985cplars/*
20b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * Copyright (c) International Business Machines  Corp., 2001
3865695bbc89088b9526ea9045410e5afb70a985cplars *
40b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * This program is free software;  you can redistribute it and/or modify
50b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * it under the terms of the GNU General Public License as published by
60b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * the Free Software Foundation; either version 2 of the License, or
70b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * (at your option) any later version.
8865695bbc89088b9526ea9045410e5afb70a985cplars *
90b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * This program is distributed in the hope that it will be useful,
100b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * but WITHOUT ANY WARRANTY;  without even the implied warranty of
110b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
120b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * the GNU General Public License for more details.
13865695bbc89088b9526ea9045410e5afb70a985cplars *
140b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * You should have received a copy of the GNU General Public License
150b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * along with this program.
16865695bbc89088b9526ea9045410e5afb70a985cplars *
170b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh * History
180b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh *	07/2001 John George
190b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh *		-Ported
200b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh *      04/2002 wjhuie sigset cleanups
21865695bbc89088b9526ea9045410e5afb70a985cplars */
22865695bbc89088b9526ea9045410e5afb70a985cplars
23865695bbc89088b9526ea9045410e5afb70a985cplars/*
24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION
250b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh *	Tests to see if pids returned from fork and waitpid are same.
26865695bbc89088b9526ea9045410e5afb70a985cplars *
27865695bbc89088b9526ea9045410e5afb70a985cplars * ALGORITHM
28865695bbc89088b9526ea9045410e5afb70a985cplars *	Check proper functioning of waitpid with pid = -1 and arg = WNOHANG
29865695bbc89088b9526ea9045410e5afb70a985cplars */
30865695bbc89088b9526ea9045410e5afb70a985cplars
310b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh#include "waitpid_common.h"
32d34d581c6a320e356a6cda923c7aa399479e812crobbiew
335086d421be015b45dbe40af25a77e3841c0d8851Wanlong Gaostatic void do_child_1(void)
34d34d581c6a320e356a6cda923c7aa399479e812crobbiew{
350b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	pid_t pid;
360b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	int i;
370b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	int status;
38d34d581c6a320e356a6cda923c7aa399479e812crobbiew
39d34d581c6a320e356a6cda923c7aa399479e812crobbiew	for (i = 0; i < MAXKIDS; i++) {
400b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh		if (i == (MAXKIDS / 2))
410b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh			SAFE_SETPGID(0, 0);
42d34d581c6a320e356a6cda923c7aa399479e812crobbiew
430b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh		pid = SAFE_FORK();
440b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh		if (pid == 0)
450b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh			do_exit(0);
46d34d581c6a320e356a6cda923c7aa399479e812crobbiew
470b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh		fork_kid_pid[i] = pid;
48d34d581c6a320e356a6cda923c7aa399479e812crobbiew	}
49d34d581c6a320e356a6cda923c7aa399479e812crobbiew
500b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	/* Check that waitpid with WNOHANG returns zero */
516cb1debdec9f1f55c7352a1f9c7f1dd293ad185dStanislav Kholmanskikh	if (TST_TRACE(waitpid_ret_test(-1, &status, WNOHANG, 0, 0)))
520b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh		return;
53d34d581c6a320e356a6cda923c7aa399479e812crobbiew
540b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	TST_CHECKPOINT_WAKE2(0, MAXKIDS);
55d34d581c6a320e356a6cda923c7aa399479e812crobbiew
5657be6e2fefd0b061dc76562d3fc1ed2d4675de67Stanislav Kholmanskikh	if (TST_TRACE(reap_children(-1, WNOHANG, fork_kid_pid, MAXKIDS)))
570b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh		return;
58865695bbc89088b9526ea9045410e5afb70a985cplars
590b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	tst_res(TPASS, "Test PASSED");
605086d421be015b45dbe40af25a77e3841c0d8851Wanlong Gao}
61865695bbc89088b9526ea9045410e5afb70a985cplars
620b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikhstatic struct tst_test test = {
630b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	.forks_child = 1,
640b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	.needs_checkpoints = 1,
650b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	.setup = waitpid_setup,
660b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	.cleanup = waitpid_cleanup,
670b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh	.test_all = waitpid_test,
680b63f1f71b7c153f094512eef8a2fb5d064e6b0bStanislav Kholmanskikh};
69