1f08c3bdfSopenharmony_ci/* 2f08c3bdfSopenharmony_ci * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. 3f08c3bdfSopenharmony_ci * 4f08c3bdfSopenharmony_ci * This program is free software; you can redistribute it and/or modify it 5f08c3bdfSopenharmony_ci * under the terms of version 2 of the GNU General Public License as 6f08c3bdfSopenharmony_ci * published by the Free Software Foundation. 7f08c3bdfSopenharmony_ci * 8f08c3bdfSopenharmony_ci * This program is distributed in the hope that it would be useful, but 9f08c3bdfSopenharmony_ci * WITHOUT ANY WARRANTY; without even the implied warranty of 10f08c3bdfSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11f08c3bdfSopenharmony_ci * 12f08c3bdfSopenharmony_ci * Further, this software is distributed without any warranty that it is 13f08c3bdfSopenharmony_ci * free of the rightful claim of any third person regarding infringement 14f08c3bdfSopenharmony_ci * or the like. Any license provided herein, whether implied or 15f08c3bdfSopenharmony_ci * otherwise, applies only to this software file. Patent licenses, if 16f08c3bdfSopenharmony_ci * any, provided herein do not apply to combinations of this program with 17f08c3bdfSopenharmony_ci * other software, or any other product whatsoever. 18f08c3bdfSopenharmony_ci * 19f08c3bdfSopenharmony_ci * You should have received a copy of the GNU General Public License along 20f08c3bdfSopenharmony_ci * with this program; if not, write the Free Software Foundation, Inc., 21f08c3bdfSopenharmony_ci * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22f08c3bdfSopenharmony_ci * 23f08c3bdfSopenharmony_ci * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, 24f08c3bdfSopenharmony_ci * Mountain View, CA 94043, or: 25f08c3bdfSopenharmony_ci * 26f08c3bdfSopenharmony_ci * http://www.sgi.com 27f08c3bdfSopenharmony_ci * 28f08c3bdfSopenharmony_ci * For further information regarding this notice, see: 29f08c3bdfSopenharmony_ci * 30f08c3bdfSopenharmony_ci * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ 31f08c3bdfSopenharmony_ci * 32f08c3bdfSopenharmony_ci */ 33f08c3bdfSopenharmony_ci/* $Id: kill09.c,v 1.8 2009/08/28 13:22:51 vapier Exp $ */ 34f08c3bdfSopenharmony_ci/********************************************************** 35f08c3bdfSopenharmony_ci * 36f08c3bdfSopenharmony_ci * OS Test - Silicon Graphics, Inc. 37f08c3bdfSopenharmony_ci * 38f08c3bdfSopenharmony_ci * TEST IDENTIFIER : kill09 39f08c3bdfSopenharmony_ci * 40f08c3bdfSopenharmony_ci * EXECUTED BY : anyone 41f08c3bdfSopenharmony_ci * 42f08c3bdfSopenharmony_ci * TEST TITLE : Basic test for kill(2) 43f08c3bdfSopenharmony_ci * 44f08c3bdfSopenharmony_ci * PARENT DOCUMENT : usctpl01 45f08c3bdfSopenharmony_ci * 46f08c3bdfSopenharmony_ci * TEST CASE TOTAL : 1 47f08c3bdfSopenharmony_ci * 48f08c3bdfSopenharmony_ci * WALL CLOCK TIME : 1 49f08c3bdfSopenharmony_ci * 50f08c3bdfSopenharmony_ci * CPU TYPES : ALL 51f08c3bdfSopenharmony_ci * 52f08c3bdfSopenharmony_ci * AUTHOR : William Roske 53f08c3bdfSopenharmony_ci * 54f08c3bdfSopenharmony_ci * CO-PILOT : Dave Fenner 55f08c3bdfSopenharmony_ci * 56f08c3bdfSopenharmony_ci * DATE STARTED : 03/30/92 57f08c3bdfSopenharmony_ci * 58f08c3bdfSopenharmony_ci * INITIAL RELEASE : UNICOS 7.0 59f08c3bdfSopenharmony_ci * 60f08c3bdfSopenharmony_ci * TEST CASES 61f08c3bdfSopenharmony_ci * 62f08c3bdfSopenharmony_ci * 1.) kill(2) returns...(See Description) 63f08c3bdfSopenharmony_ci * 64f08c3bdfSopenharmony_ci * INPUT SPECIFICATIONS 65f08c3bdfSopenharmony_ci * The standard options for system call tests are accepted. 66f08c3bdfSopenharmony_ci * (See the parse_opts(3) man page). 67f08c3bdfSopenharmony_ci * 68f08c3bdfSopenharmony_ci * OUTPUT SPECIFICATIONS 69f08c3bdfSopenharmony_ci *$ 70f08c3bdfSopenharmony_ci * DURATION 71f08c3bdfSopenharmony_ci * Terminates - with frequency and infinite modes. 72f08c3bdfSopenharmony_ci * 73f08c3bdfSopenharmony_ci * SIGNALS 74f08c3bdfSopenharmony_ci * Uses SIGUSR1 to pause before test if option set. 75f08c3bdfSopenharmony_ci * (See the parse_opts(3) man page). 76f08c3bdfSopenharmony_ci * 77f08c3bdfSopenharmony_ci * RESOURCES 78f08c3bdfSopenharmony_ci * None 79f08c3bdfSopenharmony_ci * 80f08c3bdfSopenharmony_ci * ENVIRONMENTAL NEEDS 81f08c3bdfSopenharmony_ci * No run-time environmental needs. 82f08c3bdfSopenharmony_ci * 83f08c3bdfSopenharmony_ci * SPECIAL PROCEDURAL REQUIREMENTS 84f08c3bdfSopenharmony_ci * None 85f08c3bdfSopenharmony_ci * 86f08c3bdfSopenharmony_ci * INTERCASE DEPENDENCIES 87f08c3bdfSopenharmony_ci * None 88f08c3bdfSopenharmony_ci * 89f08c3bdfSopenharmony_ci * DETAILED DESCRIPTION 90f08c3bdfSopenharmony_ci * This is a Phase I test for the kill(2) system call. It is intended 91f08c3bdfSopenharmony_ci * to provide a limited exposure of the system call, for now. It 92f08c3bdfSopenharmony_ci * should/will be extended when full functional tests are written for 93f08c3bdfSopenharmony_ci * kill(2). 94f08c3bdfSopenharmony_ci * 95f08c3bdfSopenharmony_ci * Setup: 96f08c3bdfSopenharmony_ci * Setup signal handling. 97f08c3bdfSopenharmony_ci * Pause for SIGUSR1 if option specified. 98f08c3bdfSopenharmony_ci * 99f08c3bdfSopenharmony_ci * Test: 100f08c3bdfSopenharmony_ci * Loop if the proper options are given. 101f08c3bdfSopenharmony_ci * Execute system call 102f08c3bdfSopenharmony_ci * Check return code, if system call failed (return=-1) 103f08c3bdfSopenharmony_ci * Log the errno and Issue a FAIL message. 104f08c3bdfSopenharmony_ci * Otherwise, Issue a PASS message. 105f08c3bdfSopenharmony_ci * 106f08c3bdfSopenharmony_ci * Cleanup: 107f08c3bdfSopenharmony_ci * Print errno log and/or timing stats if options given 108f08c3bdfSopenharmony_ci * 109f08c3bdfSopenharmony_ci * 110f08c3bdfSopenharmony_ci *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#**/ 111f08c3bdfSopenharmony_ci 112f08c3bdfSopenharmony_ci#include <errno.h> 113f08c3bdfSopenharmony_ci#include <string.h> 114f08c3bdfSopenharmony_ci#include <signal.h> 115f08c3bdfSopenharmony_ci#include <stdlib.h> 116f08c3bdfSopenharmony_ci#include <sys/types.h> 117f08c3bdfSopenharmony_ci#include <sys/wait.h> 118f08c3bdfSopenharmony_ci 119f08c3bdfSopenharmony_ci#include "test.h" 120f08c3bdfSopenharmony_ci 121f08c3bdfSopenharmony_civoid setup(); 122f08c3bdfSopenharmony_civoid cleanup(); 123f08c3bdfSopenharmony_civoid alarm_handler(int sig); 124f08c3bdfSopenharmony_civoid do_child(); 125f08c3bdfSopenharmony_ci 126f08c3bdfSopenharmony_cichar *TCID = "kill09"; 127f08c3bdfSopenharmony_ciint TST_TOTAL = 1; 128f08c3bdfSopenharmony_ci 129f08c3bdfSopenharmony_ciint fork_pid; 130f08c3bdfSopenharmony_ci 131f08c3bdfSopenharmony_ciint main(int ac, char **av) 132f08c3bdfSopenharmony_ci{ 133f08c3bdfSopenharmony_ci int lc; 134f08c3bdfSopenharmony_ci int status; 135f08c3bdfSopenharmony_ci 136f08c3bdfSopenharmony_ci tst_parse_opts(ac, av, NULL, NULL); 137f08c3bdfSopenharmony_ci 138f08c3bdfSopenharmony_ci#ifdef UCLINUX 139f08c3bdfSopenharmony_ci maybe_run_child(&do_child, ""); 140f08c3bdfSopenharmony_ci#endif 141f08c3bdfSopenharmony_ci 142f08c3bdfSopenharmony_ci setup(); 143f08c3bdfSopenharmony_ci 144f08c3bdfSopenharmony_ci for (lc = 0; TEST_LOOPING(lc); lc++) { 145f08c3bdfSopenharmony_ci 146f08c3bdfSopenharmony_ci tst_count = 0; 147f08c3bdfSopenharmony_ci 148f08c3bdfSopenharmony_ci if ((fork_pid = FORK_OR_VFORK()) == -1) 149f08c3bdfSopenharmony_ci tst_brkm(TBROK | TERRNO, cleanup, "fork failed"); 150f08c3bdfSopenharmony_ci 151f08c3bdfSopenharmony_ci if (fork_pid == 0) { 152f08c3bdfSopenharmony_ci#ifdef UCLINUX 153f08c3bdfSopenharmony_ci if (self_exec(av[0], "") < 0) { 154f08c3bdfSopenharmony_ci tst_brkm(TBROK, cleanup, 155f08c3bdfSopenharmony_ci "self_exec of child failed"); 156f08c3bdfSopenharmony_ci } 157f08c3bdfSopenharmony_ci#else 158f08c3bdfSopenharmony_ci do_child(); 159f08c3bdfSopenharmony_ci#endif 160f08c3bdfSopenharmony_ci } 161f08c3bdfSopenharmony_ci 162f08c3bdfSopenharmony_ci TEST(kill(fork_pid, SIGKILL)); 163f08c3bdfSopenharmony_ci if (TEST_RETURN == -1) 164f08c3bdfSopenharmony_ci tst_resm(TFAIL | TTERRNO, "kill(.., SIGKILL) failed"); 165f08c3bdfSopenharmony_ci else { 166f08c3bdfSopenharmony_ci tst_resm(TPASS, 167f08c3bdfSopenharmony_ci "kill(%d, SIGKILL) returned %ld", 168f08c3bdfSopenharmony_ci fork_pid, TEST_RETURN); 169f08c3bdfSopenharmony_ci } 170f08c3bdfSopenharmony_ci 171f08c3bdfSopenharmony_ci waitpid(0, &status, WNOHANG); 172f08c3bdfSopenharmony_ci 173f08c3bdfSopenharmony_ci } 174f08c3bdfSopenharmony_ci 175f08c3bdfSopenharmony_ci cleanup(); 176f08c3bdfSopenharmony_ci tst_exit(); 177f08c3bdfSopenharmony_ci} 178f08c3bdfSopenharmony_ci 179f08c3bdfSopenharmony_civoid do_child(void) 180f08c3bdfSopenharmony_ci{ 181f08c3bdfSopenharmony_ci /* 182f08c3bdfSopenharmony_ci * Setup alarm signal if we don't get the signal to prevent this process 183f08c3bdfSopenharmony_ci * from hanging around forever. 184f08c3bdfSopenharmony_ci */ 185f08c3bdfSopenharmony_ci signal(SIGALRM, alarm_handler); 186f08c3bdfSopenharmony_ci alarm(20); 187f08c3bdfSopenharmony_ci pause(); 188f08c3bdfSopenharmony_ci exit(1); 189f08c3bdfSopenharmony_ci} 190f08c3bdfSopenharmony_ci 191f08c3bdfSopenharmony_civoid setup(void) 192f08c3bdfSopenharmony_ci{ 193f08c3bdfSopenharmony_ci 194f08c3bdfSopenharmony_ci tst_sig(NOFORK, DEF_HANDLER, cleanup); 195f08c3bdfSopenharmony_ci 196f08c3bdfSopenharmony_ci (void)signal(SIGCHLD, SIG_IGN); 197f08c3bdfSopenharmony_ci 198f08c3bdfSopenharmony_ci TEST_PAUSE; 199f08c3bdfSopenharmony_ci 200f08c3bdfSopenharmony_ci} 201f08c3bdfSopenharmony_ci 202f08c3bdfSopenharmony_civoid cleanup(void) 203f08c3bdfSopenharmony_ci{ 204f08c3bdfSopenharmony_ci} 205f08c3bdfSopenharmony_ci 206f08c3bdfSopenharmony_civoid alarm_handler(int sig) 207f08c3bdfSopenharmony_ci{ 208f08c3bdfSopenharmony_ci exit(8); 209f08c3bdfSopenharmony_ci} 210