1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

#define N 10 /* number of child processes */

int main() {
   for (int i = 1; i <= N; ++i) {
      pid_t child = fork();
      if (child == -1) {
	 perror("unable to fork"); exit(1);
      }
      if (child == 0) {
	 /* child process */
	 _exit(i);
      }
   }

   /* parent process */
   pid_t child; int stat; int sum = 0;
   while ((child = wait(&stat)) >= 0) {
      if (WIFEXITED(stat)) {
	 sum += WEXITSTATUS(stat);
      } else {
	 printf("child %d terminated abnormally\n", (int) child);
      }
   }
   printf("sum = %d\n", sum);
}