xref: /xv6-public/forktest.c (revision 308a3b88)
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
printf(int fd,const char * s,...)11 printf(int fd, const char *s, ...)
12 {
13   write(fd, s, strlen(s));
14 }
15 
16 void
forktest(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
main(void)52 main(void)
53 {
54   forktest();
55   exit();
56 }
57