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 }