1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/types.h> 4 #include <unistd.h> 5 #include <sys/wait.h> 6 #include <string.h> 7 #include <fcntl.h> 8 #include <signal.h> 9 #include <errno.h> 10 #include "csapp.h" 11 void handler(int sig) 12 { 13 int status; 14 pid_t pid; 15 16 pid = waitpid(-1, &status, 0); 17 18 if ( pid < 0 ) { 19 printf("waitpid error: %s\n", strerror(errno)); 20 } else { 21 printf("child %d terminated\n", pid); 22 } 23 } 24 25 int main() 26 { 27 int i; 28 pid_t pid; 29 30 Signal(SIGCHLD, handler); 31 for(i = 0; i < 5; i++) { 32 if ( (pid = fork()) == 0 ) { 33 exit(10+i); 34 } 35 } 36 37 printf("parent waits in infinite loop: (ctrl-c to end)\n"); 38 while(1) { 39 } 40 41 return 0; 42 }