1e0e7d07eSrsc // Test that fork fails gracefully.
2e0e7d07eSrsc // Tiny executable so that the limit can be filling the proc table.
3e0e7d07eSrsc
4e0e7d07eSrsc #include "types.h"
5e0e7d07eSrsc #include "stat.h"
6e0e7d07eSrsc #include "user.h"
7e0e7d07eSrsc
840889627SFrans Kaashoek #define N 1000
940889627SFrans Kaashoek
10e0e7d07eSrsc void
printf(int fd,const char * s,...)11*308a3b88SFrans Kaashoek printf(int fd, const char *s, ...)
12e0e7d07eSrsc {
13e0e7d07eSrsc write(fd, s, strlen(s));
14e0e7d07eSrsc }
15e0e7d07eSrsc
16e0e7d07eSrsc void
forktest(void)17e0e7d07eSrsc forktest(void)
18e0e7d07eSrsc {
19e0e7d07eSrsc int n, pid;
20e0e7d07eSrsc
21e0e7d07eSrsc printf(1, "fork test\n");
22e0e7d07eSrsc
2340889627SFrans Kaashoek for(n=0; n<N; n++){
24e0e7d07eSrsc pid = fork();
25e0e7d07eSrsc if(pid < 0)
26e0e7d07eSrsc break;
27e0e7d07eSrsc if(pid == 0)
28e0e7d07eSrsc exit();
29e0e7d07eSrsc }
30e0e7d07eSrsc
3140889627SFrans Kaashoek if(n == N){
3240889627SFrans Kaashoek printf(1, "fork claimed to work N times!\n", N);
33e0e7d07eSrsc exit();
34e0e7d07eSrsc }
35e0e7d07eSrsc
36e0e7d07eSrsc for(; n > 0; n--){
37e0e7d07eSrsc if(wait() < 0){
38e0e7d07eSrsc printf(1, "wait stopped early\n");
39e0e7d07eSrsc exit();
40e0e7d07eSrsc }
41e0e7d07eSrsc }
42e0e7d07eSrsc
43e0e7d07eSrsc if(wait() != -1){
44e0e7d07eSrsc printf(1, "wait got too many\n");
45e0e7d07eSrsc exit();
46e0e7d07eSrsc }
47e0e7d07eSrsc
48e0e7d07eSrsc printf(1, "fork test OK\n");
49e0e7d07eSrsc }
50e0e7d07eSrsc
51e0e7d07eSrsc int
main(void)52e0e7d07eSrsc main(void)
53e0e7d07eSrsc {
54e0e7d07eSrsc forktest();
55e0e7d07eSrsc exit();
56e0e7d07eSrsc }
57