1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. 3865695bbc89088b9526ea9045410e5afb70a985cplars * 4865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify it 5865695bbc89088b9526ea9045410e5afb70a985cplars * under the terms of version 2 of the GNU General Public License as 6865695bbc89088b9526ea9045410e5afb70a985cplars * published by the Free Software Foundation. 7865695bbc89088b9526ea9045410e5afb70a985cplars * 8865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it would be useful, but 9865695bbc89088b9526ea9045410e5afb70a985cplars * WITHOUT ANY WARRANTY; without even the implied warranty of 10865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11865695bbc89088b9526ea9045410e5afb70a985cplars * 12865695bbc89088b9526ea9045410e5afb70a985cplars * Further, this software is distributed without any warranty that it is 13865695bbc89088b9526ea9045410e5afb70a985cplars * free of the rightful claim of any third person regarding infringement 14865695bbc89088b9526ea9045410e5afb70a985cplars * or the like. Any license provided herein, whether implied or 15865695bbc89088b9526ea9045410e5afb70a985cplars * otherwise, applies only to this software file. Patent licenses, if 16865695bbc89088b9526ea9045410e5afb70a985cplars * any, provided herein do not apply to combinations of this program with 17865695bbc89088b9526ea9045410e5afb70a985cplars * other software, or any other product whatsoever. 18865695bbc89088b9526ea9045410e5afb70a985cplars * 19865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License along 20fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * with this program; if not, write the Free Software Foundation, Inc., 21fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22865695bbc89088b9526ea9045410e5afb70a985cplars * 23865695bbc89088b9526ea9045410e5afb70a985cplars * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, 24865695bbc89088b9526ea9045410e5afb70a985cplars * Mountain View, CA 94043, or: 25865695bbc89088b9526ea9045410e5afb70a985cplars * 26865695bbc89088b9526ea9045410e5afb70a985cplars * http://www.sgi.com 27865695bbc89088b9526ea9045410e5afb70a985cplars * 28865695bbc89088b9526ea9045410e5afb70a985cplars * For further information regarding this notice, see: 29865695bbc89088b9526ea9045410e5afb70a985cplars * 30865695bbc89088b9526ea9045410e5afb70a985cplars * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ 31865695bbc89088b9526ea9045410e5afb70a985cplars * 32865695bbc89088b9526ea9045410e5afb70a985cplars */ 33923b23ff1fd1b77bd895949f9a6b4508c6485f33subrata_modak/* $Id: setpgid01.c,v 1.7 2009/11/02 13:57:18 subrata_modak Exp $ */ 34700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang 35700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang/* 36700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang * Description: 37700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang * Verify that: 38700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang * 1. Basic functionality test for setpgid(2). 398866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang * 2. Check functioning of setpgid(2) with pid = 0 and pgid = 0. 40700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang */ 41865695bbc89088b9526ea9045410e5afb70a985cplars 42865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 43865695bbc89088b9526ea9045410e5afb70a985cplars#include <string.h> 44865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h> 45865695bbc89088b9526ea9045410e5afb70a985cplars#include <stdlib.h> 468866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang#include <sys/wait.h> 47865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 48865695bbc89088b9526ea9045410e5afb70a985cplars 49700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wangstatic void setup(void); 50700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wangstatic void cleanup(void); 51865695bbc89088b9526ea9045410e5afb70a985cplars 52fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "setpgid01"; 53354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 54700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wangstatic void setpgid_test1(void); 558866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wangstatic void setpgid_test2(void); 568866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wangstatic void (*testfunc[])(void) = { setpgid_test1, setpgid_test2}; 57700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wangint TST_TOTAL = ARRAY_SIZE(testfunc); 58865695bbc89088b9526ea9045410e5afb70a985cplars 5956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av) 60865695bbc89088b9526ea9045410e5afb70a985cplars{ 61700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang int i, lc; 6256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 63d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(ac, av, NULL, NULL); 64865695bbc89088b9526ea9045410e5afb70a985cplars 6556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak setup(); 66865695bbc89088b9526ea9045410e5afb70a985cplars 6756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak for (lc = 0; TEST_LOOPING(lc); lc++) { 68d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 6956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 70700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang for (i = 0; i < TST_TOTAL; i++) 71700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang (*testfunc[i])(); 722c28215423293e443469a07ae7011135d058b671Garrett Cooper } 73865695bbc89088b9526ea9045410e5afb70a985cplars 7456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak cleanup(); 751e6f5a673655551de5734ff31ef48cd63b604e6dGarrett Cooper tst_exit(); 762c28215423293e443469a07ae7011135d058b671Garrett Cooper} 77865695bbc89088b9526ea9045410e5afb70a985cplars 78700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wangstatic void setpgid_test1(void) 79865695bbc89088b9526ea9045410e5afb70a985cplars{ 80700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang pid_t pgid, pid; 81865695bbc89088b9526ea9045410e5afb70a985cplars 8256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak pgid = getpgrp(); 8356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak pid = getpid(); 8456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 85700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang TEST(setpgid(pid, pgid)); 86700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang if (TEST_RETURN == -1 || getpgrp() != pgid) { 87700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang tst_resm(TFAIL | TTERRNO, "test setpgid(%d, %d) fail", 88700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang pid, pgid); 89700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang } else { 90700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang tst_resm(TPASS, "test setpgid(%d, %d) success", pid, pgid); 91865695bbc89088b9526ea9045410e5afb70a985cplars } 922c28215423293e443469a07ae7011135d058b671Garrett Cooper} 93865695bbc89088b9526ea9045410e5afb70a985cplars 948866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wangstatic int wait4child(pid_t child) 958866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang{ 968866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang int status; 978866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang 988866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang if (waitpid(child, &status, 0) == -1) 998866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang tst_resm(TBROK|TERRNO, "waitpid"); 1008866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang if (WIFEXITED(status)) 1018866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang return WEXITSTATUS(status); 1028866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang else 1038866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang return status; 1048866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang} 1058866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang 1068866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wangstatic void setpgid_test2(void) 1078866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang{ 1088866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang int ret; 1098866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang pid_t pgid, pid; 1108866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang 1118866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang pid = FORK_OR_VFORK(); 1128866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang if (pid == -1) 1138866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang tst_brkm(TBROK | TERRNO, cleanup, "fork()"); 1148866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang 1158866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang if (pid != 0) { 1168866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang ret = wait4child(pid); 1178866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang } else { 1188866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang pid = getpid(); 1198866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang TEST(setpgid(0, 0)); 1208866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang pgid = getpgrp(); 1218866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang if (TEST_RETURN == -1) { 1228866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang fprintf(stderr, "setpgid(0, 0) fails in " 1238866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang "child process: %s\n", strerror(TEST_ERRNO)); 1248866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang exit(1); 1258866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang } else if (pgid != pid) { 1268866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang fprintf(stderr, "setpgid(0, 0) fails to make PGID" 1278866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang "equal to PID\n"); 1288866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang exit(1); 1298866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang } else { 1308866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang exit(0); 1318866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang } 1328866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang } 1338866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang 1348866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang if (ret == 0) 1358866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang tst_resm(TPASS, "test setpgid(0, 0) success"); 1368866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang else 1378866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang tst_resm(TFAIL, "test setpgid(0, 0) fail"); 1388866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang} 1398866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang 1408866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang 141700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wangstatic void setup(void) 142865695bbc89088b9526ea9045410e5afb70a985cplars{ 1438866f064cd35c52a746f3418a403b7f4271a6c76Xiaoguang Wang tst_sig(FORK, DEF_HANDLER, cleanup); 14456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 145700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang TEST_PAUSE; 146700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang} 147700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang 148700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wangstatic void cleanup(void) 149700c3f95774b137425f122226d526d7815cc6cebXiaoguang Wang{ 150ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 151