Initial import of binutils 2.22 on the new vendor branch
[dragonfly.git] / test / stress / stress2 / misc / fullpath.sh
1 #!/bin/sh
2
3 #
4 # Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
5 # All rights reserved.
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
10 # 1. Redistributions of source code must retain the above copyright
11 #    notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 #    notice, this list of conditions and the following disclaimer in the
14 #    documentation and/or other materials provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 # SUCH DAMAGE.
27 #
28 # $FreeBSD$
29 #
30
31 # Test scenario by marcus@freebsd.org
32
33 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
34
35 . ../default.cfg
36
37 odir=`pwd`
38 cd /tmp
39 sed '1,/^EOF/d' < $odir/$0 > fullpath.c
40 cc -o fullpath -Wall fullpath.c
41 rm -f fullpath.c
42 cd /proc
43
44 for i in `jot 5`; do
45         /tmp/fullpath &
46 done
47
48 for i in `jot 30`; do
49         for j in `jot 25`; do
50                 pid=`perl -e 'print splice(@ARGV,rand(@ARGV),1), " ";' $(echo [0-9]*)`
51 #               echo $pid
52                 procstat -f $pid > /dev/null 2>&1
53                 procstat -f $pid > /dev/null 2>&1
54                 procstat -f $pid > /dev/null 2>&1
55                 procstat -f $pid > /dev/null 2>&1
56                 procstat -f $pid > /dev/null 2>&1
57         done
58 done
59
60 for i in `jot 5`; do
61         wait
62 done
63
64 rm -f /tmp/fullpath
65 exit
66 EOF
67
68 #include <stdio.h>
69 #include <signal.h>
70 #include <stdlib.h>
71 #include <unistd.h>
72 #include <err.h>
73 #include <strings.h>
74 #include <sys/wait.h>
75
76 char buf[4096];
77
78 void
79 handler(int i) {
80         exit(0);
81 }
82
83 int
84 test(void) {
85         pid_t r;
86         int status;
87
88         for (;;) {
89                 r = fork();
90                 if (r == 0) {
91                         bzero(buf, sizeof(buf));
92                         exit(0); /*child dies */
93                 }
94                 if (r < 0) {
95                         perror("fork");
96                         exit(2);
97                 }
98                 wait(&status);
99         }
100         return 0;
101 }
102
103 int main(int argc, char **argv)
104 {
105         int i;
106
107         i = 0;
108         signal(SIGALRM, handler);
109         alarm(60);
110
111
112         return test();
113 }