#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; }