11ac21102f27aee0114733566ef4abd559051c5dasewardj#include <stdlib.h> 21ac21102f27aee0114733566ef4abd559051c5dasewardj#include <stdio.h> 31ac21102f27aee0114733566ef4abd559051c5dasewardj#include <errno.h> 41ac21102f27aee0114733566ef4abd559051c5dasewardj#include <unistd.h> 51ac21102f27aee0114733566ef4abd559051c5dasewardj#include <sys/wait.h> 61ac21102f27aee0114733566ef4abd559051c5dasewardjvoid fork_chain(int level) 71ac21102f27aee0114733566ef4abd559051c5dasewardj{ 81ac21102f27aee0114733566ef4abd559051c5dasewardj int pid; 91ac21102f27aee0114733566ef4abd559051c5dasewardj 101ac21102f27aee0114733566ef4abd559051c5dasewardj printf ("forking level %d\n", level); 111ac21102f27aee0114733566ef4abd559051c5dasewardj fflush (stdout); 121ac21102f27aee0114733566ef4abd559051c5dasewardj pid = fork(); 131ac21102f27aee0114733566ef4abd559051c5dasewardj if (pid == -1) { 141ac21102f27aee0114733566ef4abd559051c5dasewardj perror("fork"); 151ac21102f27aee0114733566ef4abd559051c5dasewardj exit(1); 161ac21102f27aee0114733566ef4abd559051c5dasewardj } 171ac21102f27aee0114733566ef4abd559051c5dasewardj 181ac21102f27aee0114733566ef4abd559051c5dasewardj if (pid == 0) { 191ac21102f27aee0114733566ef4abd559051c5dasewardj if (level > 0) { 201ac21102f27aee0114733566ef4abd559051c5dasewardj fork_chain (level - 1); 211ac21102f27aee0114733566ef4abd559051c5dasewardj } 221ac21102f27aee0114733566ef4abd559051c5dasewardj } else { 231ac21102f27aee0114733566ef4abd559051c5dasewardj int ret; 241ac21102f27aee0114733566ef4abd559051c5dasewardj int status; 251ac21102f27aee0114733566ef4abd559051c5dasewardj while((ret = waitpid(pid, &status, 0)) != pid) { 261ac21102f27aee0114733566ef4abd559051c5dasewardj if (errno != EINTR) { 271ac21102f27aee0114733566ef4abd559051c5dasewardj perror("waitpid"); 281ac21102f27aee0114733566ef4abd559051c5dasewardj exit(1); 291ac21102f27aee0114733566ef4abd559051c5dasewardj } 301ac21102f27aee0114733566ef4abd559051c5dasewardj } 311ac21102f27aee0114733566ef4abd559051c5dasewardj } 321ac21102f27aee0114733566ef4abd559051c5dasewardj} 331ac21102f27aee0114733566ef4abd559051c5dasewardjint main() 341ac21102f27aee0114733566ef4abd559051c5dasewardj{ 35f5194b352c74cba18ba0e628567fd8183f0a6048sewardj fork_chain (15); 361ac21102f27aee0114733566ef4abd559051c5dasewardj return 0; 371ac21102f27aee0114733566ef4abd559051c5dasewardj} 38