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