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