forktest.c (766B)
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 }