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