1865695bbc89088b9526ea9045410e5afb70a985cplars/* 27268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * Copyright (c) International Business Machines Corp., 2001 3865695bbc89088b9526ea9045410e5afb70a985cplars * 47268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * This program is free software; you can redistribute it and/or modify 57268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * it under the terms of the GNU General Public License as published by 67268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * the Free Software Foundation; either version 2 of the License, or 77268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * (at your option) any later version. 8865695bbc89088b9526ea9045410e5afb70a985cplars * 97268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * This program is distributed in the hope that it will be useful, 107268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * but WITHOUT ANY WARRANTY; without even the implied warranty of 117268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 127268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * the GNU General Public License for more details. 13865695bbc89088b9526ea9045410e5afb70a985cplars * 147268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * You should have received a copy of the GNU General Public License 157268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * along with this program. 16865695bbc89088b9526ea9045410e5afb70a985cplars * 177268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * History 187268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * 07/2001 John George 197268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * -Ported 207268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * 04/2002 wjhuie sigset cleanups 21865695bbc89088b9526ea9045410e5afb70a985cplars */ 22865695bbc89088b9526ea9045410e5afb70a985cplars 23865695bbc89088b9526ea9045410e5afb70a985cplars/* 24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION 257268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh * Tests to see if pids returned from fork and waitpid are same 26bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak * 27865695bbc89088b9526ea9045410e5afb70a985cplars * ALGORITHM 2804cfe1bb3043e373f65e35a35705319cbeba163cWanlong Gao * Check proper functioning of waitpid with pid = 0 and < -1 with arg 2904cfe1bb3043e373f65e35a35705319cbeba163cWanlong Gao * WUNTRACED 30865695bbc89088b9526ea9045410e5afb70a985cplars */ 31865695bbc89088b9526ea9045410e5afb70a985cplars 327268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh#include "waitpid_common.h" 33865695bbc89088b9526ea9045410e5afb70a985cplars 347268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikhstatic void do_child_1(void) 35865695bbc89088b9526ea9045410e5afb70a985cplars{ 367268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh pid_t pid, group; 377268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh int i; 387268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh int status; 39865695bbc89088b9526ea9045410e5afb70a985cplars 407268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh group = SAFE_GETPGID(0); 4156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 42c548a3187d37ebdacce0891131c9ab5143bc5998Garrett Cooper for (i = 0; i < MAXKIDS; i++) { 437268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh if (i == (MAXKIDS / 2)) 447268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh SAFE_SETPGID(0, 0); 45865695bbc89088b9526ea9045410e5afb70a985cplars 467268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh pid = SAFE_FORK(); 477268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh if (pid == 0) 487268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh do_exit(1); 49c548a3187d37ebdacce0891131c9ab5143bc5998Garrett Cooper 507268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh fork_kid_pid[i] = pid; 51c548a3187d37ebdacce0891131c9ab5143bc5998Garrett Cooper } 52865695bbc89088b9526ea9045410e5afb70a985cplars 537268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh if (TST_TRACE(waitpid_ret_test(0, &status, WNOHANG | WUNTRACED, 0, 0))) 547268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh return; 55d34d581c6a320e356a6cda923c7aa399479e812crobbiew 567268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh if (TST_TRACE(waitpid_ret_test(-group, &status, WNOHANG | WUNTRACED, 577268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh 0, 0))) 587268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh return; 59865695bbc89088b9526ea9045410e5afb70a985cplars 607268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh TST_CHECKPOINT_WAKE2(0, MAXKIDS); 61865695bbc89088b9526ea9045410e5afb70a985cplars 627268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh if (TST_TRACE(reap_children(0, WUNTRACED, fork_kid_pid + (MAXKIDS / 2), 637268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh MAXKIDS / 2))) 647268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh return; 65865695bbc89088b9526ea9045410e5afb70a985cplars 667268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh if (TST_TRACE(reap_children(-group, WUNTRACED, fork_kid_pid, 677268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh MAXKIDS / 2))) 687268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh return; 69865695bbc89088b9526ea9045410e5afb70a985cplars 707268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh tst_res(TPASS, "Test PASSED"); 71865695bbc89088b9526ea9045410e5afb70a985cplars} 72d34d581c6a320e356a6cda923c7aa399479e812crobbiew 737268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikhstatic struct tst_test test = { 747268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh .forks_child = 1, 757268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh .needs_checkpoints = 1, 767268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh .setup = waitpid_setup, 777268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh .cleanup = waitpid_cleanup, 787268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh .test_all = waitpid_test, 797268ae743688268db79e2da15924c9a0a62012e1Stanislav Kholmanskikh}; 80