xv6

port of xv6 to x86-64
git clone http://frotz.net/git/xv6.git
Log | Files | Refs | README | LICENSE

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 }