root/forktest.c
/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- printf
- forktest
- main
1 // Test that fork fails gracefully.
2 // Tiny executable so that the limit can be filling the proc table.
3
4 #include "types.h"
5 #include "stat.h"
6 #include "user.h"
7
8 #define N 1000
9
10 void
11 printf(int fd, char *s, ...)
12 {
13 write(fd, s, strlen(s));
14 }
15
16 void
17 forktest(void)
18 {
19 int n, pid;
20
21 printf(1, "fork test\n");
22
23 for(n=0; n<N; n++){
24 pid = fork();
25 if(pid < 0)
26 break;
27 if(pid == 0)
28 exit();
29 }
30
31 if(n == N){
32 printf(1, "fork claimed to work N times!\n", N);
33 exit();
34 }
35
36 for(; n > 0; n--){
37 if(wait() < 0){
38 printf(1, "wait stopped early\n");
39 exit();
40 }
41 }
42
43 if(wait() != -1){
44 printf(1, "wait got too many\n");
45 exit();
46 }
47
48 printf(1, "fork test OK\n");
49 }
50
51 int
52 main(void)
53 {
54 forktest();
55 exit();
56 }