1 /*
2 *
3 * Copyright (c) International Business Machines Corp., 2001
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13 * the GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 /*
21 * NAME
22 * fork02.c
23 *
24 * DESCRIPTION
25 * Test correct operation of fork:
26 * pid == 0 in child;
27 * pid > 0 in parent from wait;
28 *
29 * ALGORITHM
30 * Fork one process, check for pid == 0 in child.
31 * Check for pid > 0 in parent after wait.
32 *
33 * USAGE
34 * fork02
35 *
36 * HISTORY
37 * 07/2001 Ported by Wayne Boyer
38 *
39 * RESTRICTIONS
40 * None
41 */
42
43 #include <sys/types.h>
44 #include <sys/wait.h>
45 #include <stdio.h>
46 #include <unistd.h>
47 #include "test.h"
48
49 static void setup(void);
50 static void cleanup(void);
51
52 char *TCID = "fork02";
53 int TST_TOTAL = 1;
54
main(int ac,char ** av)55 int main(int ac, char **av)
56 {
57 int pid1, pid2, status;
58
59 int lc;
60
61 tst_parse_opts(ac, av, NULL, NULL);
62
63 setup();
64
65 for (lc = 0; TEST_LOOPING(lc); lc++) {
66 tst_count = 0;
67
68 pid1 = fork();
69 if (pid1 == -1)
70 tst_brkm(TBROK, cleanup, "fork() failed");
71
72 if (pid1 == 0) {
73 tst_resm(TINFO, "Inside child");
74 _exit(0);
75 } else {
76 tst_resm(TINFO, "Inside parent");
77 pid2 = wait(&status);
78 tst_resm(TINFO, "exit status of wait %d", status);
79
80 if (pid1 == pid2)
81 tst_resm(TPASS, "test 1 PASSED");
82 else
83 tst_resm(TFAIL, "test 1 FAILED");
84 }
85 }
86
87 cleanup();
88 tst_exit();
89 }
90
setup(void)91 static void setup(void)
92 {
93 tst_sig(FORK, DEF_HANDLER, cleanup);
94 TEST_PAUSE;
95 }
96
cleanup(void)97 static void cleanup(void)
98 {
99 }
100