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