55 lines
755 B
C
55 lines
755 B
C
|
// 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"
|
||
|
|
||
|
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<1000; n++){
|
||
|
pid = fork();
|
||
|
if(pid < 0)
|
||
|
break;
|
||
|
if(pid == 0)
|
||
|
exit();
|
||
|
}
|
||
|
|
||
|
if(n == 1000){
|
||
|
printf(1, "fork claimed to work 1000 times!\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();
|
||
|
}
|