previous | start | next

Using waitpid - version 1

    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   }


previous | start | next