#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
void fork_chain(int level)
{
int pid;
printf ("forking level %d\n", level);
fflush (stdout);
pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
}
if (pid == 0) {
if (level > 0) {
fork_chain (level - 1);
}
} else {
int ret;
int status;
while((ret = waitpid(pid, &status, 0)) != pid) {
if (errno != EINTR) {
perror("waitpid");
exit(1);
}
}
}
}
int main()
{
fork_chain (15);
return 0;
}