view src/usr/forktest.c @ 52:1adde248a61f default tip

merge
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 07 Jun 2019 17:30:15 +0900
parents 83c23a36980d
children
line wrap: on
line source

// Test that fork fails gracefully.
// Tiny executable so that the limit can be filling the proc table.

#include "types.h"
#include "stat.h"
#include "user.h"

#define N  1000

void
printf(int fd, char *s, ...)
{
    write(fd, s, strlen(s));
}

void
forktest(void)
{
    int n, pid;
    
    printf(1, "fork test\n");
    
    for(n=0; n<N; n++){
        pid = fork();
        if(pid < 0)
				{
						printf(1, "fork failed!\n");
            break;
				}
        if(pid == 0)
            exit();
    }
    
    if(n == N){
        printf(1, "fork claimed to work N times!\n", N);
        exit();
    }
    
    for(; n > 0; n--){
        if(wait() < 0){
            printf(1, "wait stopped early\n");
            exit();
        }
    }
    
    if(wait() != -1){
        printf(1, "wait got too many\n");
        exit();
    }
    
    printf(1, "fork test OK\n");
}

int
main(void)
{
    forktest();
    exit();
}