1#include <stdlib.h>
2#include <stdio.h>
3#include <errno.h>
4#include <unistd.h>
5#include <sys/wait.h>
6void fork_chain(int level)
7{
8   int pid;
9
10   printf ("forking level %d\n", level);
11   fflush (stdout);
12   pid = fork();
13   if (pid == -1) {
14      perror("fork");
15      exit(1);
16   }
17
18   if (pid == 0) {
19      if (level > 0) {
20         fork_chain (level - 1);
21      }
22   } else {
23      int ret;
24      int status;
25      while((ret = waitpid(pid, &status, 0)) != pid) {
26         if (errno != EINTR) {
27            perror("waitpid");
28            exit(1);
29         }
30      }
31   }
32}
33int main()
34{
35   fork_chain (15);
36   return 0;
37}
38