kill01.c revision d59a659cd639ca2780b00049d102acd2a783d585
1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * 3865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) International Business Machines Corp., 2001 4865695bbc89088b9526ea9045410e5afb70a985cplars * 5865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify 6865695bbc89088b9526ea9045410e5afb70a985cplars * it under the terms of the GNU General Public License as published by 7865695bbc89088b9526ea9045410e5afb70a985cplars * the Free Software Foundation; either version 2 of the License, or 8865695bbc89088b9526ea9045410e5afb70a985cplars * (at your option) any later version. 9865695bbc89088b9526ea9045410e5afb70a985cplars * 10865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it will be useful, 11865695bbc89088b9526ea9045410e5afb70a985cplars * but WITHOUT ANY WARRANTY; without even the implied warranty of 12865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13865695bbc89088b9526ea9045410e5afb70a985cplars * the GNU General Public License for more details. 14865695bbc89088b9526ea9045410e5afb70a985cplars * 15865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License 16865695bbc89088b9526ea9045410e5afb70a985cplars * along with this program; if not, write to the Free Software 174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18865695bbc89088b9526ea9045410e5afb70a985cplars */ 19865695bbc89088b9526ea9045410e5afb70a985cplars 20865695bbc89088b9526ea9045410e5afb70a985cplars/* 21865695bbc89088b9526ea9045410e5afb70a985cplars * NAME 22865695bbc89088b9526ea9045410e5afb70a985cplars * kill01.c 23865695bbc89088b9526ea9045410e5afb70a985cplars * 24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION 25865695bbc89088b9526ea9045410e5afb70a985cplars * Test case to check the basic functionality of kill(). 26865695bbc89088b9526ea9045410e5afb70a985cplars * 27865695bbc89088b9526ea9045410e5afb70a985cplars * ALGORITHM 28865695bbc89088b9526ea9045410e5afb70a985cplars * call setup 29865695bbc89088b9526ea9045410e5afb70a985cplars * loop if the -i option was given 30865695bbc89088b9526ea9045410e5afb70a985cplars * fork a child 31865695bbc89088b9526ea9045410e5afb70a985cplars * execute the kill system call 32865695bbc89088b9526ea9045410e5afb70a985cplars * check the return value 33865695bbc89088b9526ea9045410e5afb70a985cplars * if return value is -1 34865695bbc89088b9526ea9045410e5afb70a985cplars * issue a FAIL message, break remaining tests and cleanup 35865695bbc89088b9526ea9045410e5afb70a985cplars * if we are doing functional testing 36865695bbc89088b9526ea9045410e5afb70a985cplars * if the process was terminated with the expected signal. 37865695bbc89088b9526ea9045410e5afb70a985cplars * issue a PASS message 38865695bbc89088b9526ea9045410e5afb70a985cplars * otherwise 39865695bbc89088b9526ea9045410e5afb70a985cplars * issue a FAIL message 40865695bbc89088b9526ea9045410e5afb70a985cplars * call cleanup 41865695bbc89088b9526ea9045410e5afb70a985cplars * 42865695bbc89088b9526ea9045410e5afb70a985cplars * USAGE 43865695bbc89088b9526ea9045410e5afb70a985cplars * kill01 [-c n] [-f] [-i n] [-I x] [-P x] [-t] 44865695bbc89088b9526ea9045410e5afb70a985cplars * where, -c n : Run n copies concurrently. 45865695bbc89088b9526ea9045410e5afb70a985cplars * -f : Turn off functionality Testing. 46865695bbc89088b9526ea9045410e5afb70a985cplars * -i n : Execute test n times. 47865695bbc89088b9526ea9045410e5afb70a985cplars * -I x : Execute test for x seconds. 48865695bbc89088b9526ea9045410e5afb70a985cplars * -P x : Pause for x seconds between iterations. 49865695bbc89088b9526ea9045410e5afb70a985cplars * -t : Turn on syscall timing. 50865695bbc89088b9526ea9045410e5afb70a985cplars * 51865695bbc89088b9526ea9045410e5afb70a985cplars * HISTORY 52865695bbc89088b9526ea9045410e5afb70a985cplars * 07/2001 Ported by Wayne Boyer 53865695bbc89088b9526ea9045410e5afb70a985cplars * 54865695bbc89088b9526ea9045410e5afb70a985cplars * RESTRICTIONS 55865695bbc89088b9526ea9045410e5afb70a985cplars * This test should be ran as a non-root user. 56865695bbc89088b9526ea9045410e5afb70a985cplars */ 57865695bbc89088b9526ea9045410e5afb70a985cplars 58865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 59865695bbc89088b9526ea9045410e5afb70a985cplars#include "usctest.h" 60865695bbc89088b9526ea9045410e5afb70a985cplars 61865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h> 62865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 63865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/wait.h> 64865695bbc89088b9526ea9045410e5afb70a985cplars 65865695bbc89088b9526ea9045410e5afb70a985cplarsvoid cleanup(void); 66865695bbc89088b9526ea9045410e5afb70a985cplarsvoid setup(void); 67d34d581c6a320e356a6cda923c7aa399479e812crobbiewvoid do_child(void); 68865695bbc89088b9526ea9045410e5afb70a985cplars 6956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakchar *TCID = "kill01"; 70865695bbc89088b9526ea9045410e5afb70a985cplarsint TST_TOTAL = 1; 71865695bbc89088b9526ea9045410e5afb70a985cplars 72865695bbc89088b9526ea9045410e5afb70a985cplars#define TEST_SIG SIGKILL 73865695bbc89088b9526ea9045410e5afb70a985cplars 74b8360ee9a4b3e0ae1707116f48bfdbcee9ba2dberobbiewint main(int ac, char **av) 75865695bbc89088b9526ea9045410e5afb70a985cplars{ 7689af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc; 7789af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis char *msg; 7856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak pid_t pid; 79865695bbc89088b9526ea9045410e5afb70a985cplars int exno, status, nsig; 80865695bbc89088b9526ea9045410e5afb70a985cplars 8145e285d46ab47b0ff76c88acb5ba97b0bd5f753dGarrett Cooper if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) { 8260fa8014af7534eaefa901200c8df4b74ce422e6Garrett Cooper tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); 83865695bbc89088b9526ea9045410e5afb70a985cplars } 84d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 85d34d581c6a320e356a6cda923c7aa399479e812crobbiew maybe_run_child(&do_child, ""); 86d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 87d34d581c6a320e356a6cda923c7aa399479e812crobbiew 8856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak setup(); /* global setup */ 89865695bbc89088b9526ea9045410e5afb70a985cplars 90865695bbc89088b9526ea9045410e5afb70a985cplars /* The following loop checks looping state if -i option given */ 91865695bbc89088b9526ea9045410e5afb70a985cplars for (lc = 0; TEST_LOOPING(lc); lc++) { 92865695bbc89088b9526ea9045410e5afb70a985cplars 93d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang /* reset tst_count in case we are looping */ 94d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 95865695bbc89088b9526ea9045410e5afb70a985cplars status = 1; 96865695bbc89088b9526ea9045410e5afb70a985cplars exno = 1; 97d34d581c6a320e356a6cda923c7aa399479e812crobbiew pid = FORK_OR_VFORK(); 98865695bbc89088b9526ea9045410e5afb70a985cplars if (pid < 0) { 99865695bbc89088b9526ea9045410e5afb70a985cplars tst_brkm(TBROK, cleanup, "Fork of child failed"); 100865695bbc89088b9526ea9045410e5afb70a985cplars } else if (pid == 0) { 101d34d581c6a320e356a6cda923c7aa399479e812crobbiew#ifdef UCLINUX 102d34d581c6a320e356a6cda923c7aa399479e812crobbiew if (self_exec(av[0], "") < 0) { 10356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak tst_brkm(TBROK, cleanup, 10456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "self_exec of child failed"); 105d34d581c6a320e356a6cda923c7aa399479e812crobbiew } 106d34d581c6a320e356a6cda923c7aa399479e812crobbiew#else 107d34d581c6a320e356a6cda923c7aa399479e812crobbiew do_child(); 108d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 109865695bbc89088b9526ea9045410e5afb70a985cplars } else { 110865695bbc89088b9526ea9045410e5afb70a985cplars TEST(kill(pid, TEST_SIG)); 111865695bbc89088b9526ea9045410e5afb70a985cplars waitpid(pid, &status, 0); 112865695bbc89088b9526ea9045410e5afb70a985cplars } 113865695bbc89088b9526ea9045410e5afb70a985cplars 114865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_RETURN == -1) { 115865695bbc89088b9526ea9045410e5afb70a985cplars tst_brkm(TFAIL, cleanup, "%s failed - errno = %d : %s", 11656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak TCID, TEST_ERRNO, strerror(TEST_ERRNO)); 117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 118865695bbc89088b9526ea9045410e5afb70a985cplars 119865695bbc89088b9526ea9045410e5afb70a985cplars if (STD_FUNCTIONAL_TEST) { 120865695bbc89088b9526ea9045410e5afb70a985cplars /* 121865695bbc89088b9526ea9045410e5afb70a985cplars * Check to see if the process was terminated with the 122865695bbc89088b9526ea9045410e5afb70a985cplars * expected signal. 123865695bbc89088b9526ea9045410e5afb70a985cplars */ 124865695bbc89088b9526ea9045410e5afb70a985cplars nsig = WTERMSIG(status); 125865695bbc89088b9526ea9045410e5afb70a985cplars if (nsig == TEST_SIG) { 126865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TPASS, "received expected signal %d", 12756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak nsig); 128865695bbc89088b9526ea9045410e5afb70a985cplars } else { 12956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak tst_resm(TFAIL, 13056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "expected signal %d received %d", 13156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak TEST_SIG, nsig); 132865695bbc89088b9526ea9045410e5afb70a985cplars } 133865695bbc89088b9526ea9045410e5afb70a985cplars } else { 134865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TPASS, "call succeeded"); 135865695bbc89088b9526ea9045410e5afb70a985cplars } 136865695bbc89088b9526ea9045410e5afb70a985cplars } 137865695bbc89088b9526ea9045410e5afb70a985cplars cleanup(); 138865695bbc89088b9526ea9045410e5afb70a985cplars 1397d0a4a57fbcd47f72b67c08df532e8ef47f6fdaeGarrett Cooper tst_exit(); 140865695bbc89088b9526ea9045410e5afb70a985cplars} 141865695bbc89088b9526ea9045410e5afb70a985cplars 142d34d581c6a320e356a6cda923c7aa399479e812crobbiew/* 143d34d581c6a320e356a6cda923c7aa399479e812crobbiew * do_child() 144d34d581c6a320e356a6cda923c7aa399479e812crobbiew */ 14556207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid do_child() 146d34d581c6a320e356a6cda923c7aa399479e812crobbiew{ 147d34d581c6a320e356a6cda923c7aa399479e812crobbiew int exno = 1; 148bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 149d34d581c6a320e356a6cda923c7aa399479e812crobbiew pause(); 150354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao exit(exno); 151d34d581c6a320e356a6cda923c7aa399479e812crobbiew} 152865695bbc89088b9526ea9045410e5afb70a985cplars 153865695bbc89088b9526ea9045410e5afb70a985cplars/* 154865695bbc89088b9526ea9045410e5afb70a985cplars * setup() - performs all ONE TIME setup for this test 155865695bbc89088b9526ea9045410e5afb70a985cplars */ 15656207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid setup(void) 157865695bbc89088b9526ea9045410e5afb70a985cplars{ 1582c28215423293e443469a07ae7011135d058b671Garrett Cooper 159865695bbc89088b9526ea9045410e5afb70a985cplars TEST_PAUSE; 160865695bbc89088b9526ea9045410e5afb70a985cplars} 161865695bbc89088b9526ea9045410e5afb70a985cplars 162865695bbc89088b9526ea9045410e5afb70a985cplars/* 163865695bbc89088b9526ea9045410e5afb70a985cplars * cleanup() - performs all the ONE TIME cleanup for this test at completion 164865695bbc89088b9526ea9045410e5afb70a985cplars * or premature exit. 165865695bbc89088b9526ea9045410e5afb70a985cplars */ 16656207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid cleanup(void) 167865695bbc89088b9526ea9045410e5afb70a985cplars{ 168865695bbc89088b9526ea9045410e5afb70a985cplars /* 169865695bbc89088b9526ea9045410e5afb70a985cplars * print timing status if that option was specified. 170865695bbc89088b9526ea9045410e5afb70a985cplars * print errno log if that option was specified 171865695bbc89088b9526ea9045410e5afb70a985cplars */ 172865695bbc89088b9526ea9045410e5afb70a985cplars TEST_CLEANUP; 173865695bbc89088b9526ea9045410e5afb70a985cplars 174ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 175