Tuesday, July 24, 2012

c program showing - fork() and wait()

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <sys/wait.h>
  6.  
  7. int main(void)  {
  8.  
  9.     pid_t child_pid, wpid, pid;
  10.     int status = 0;
  11.     int i;
  12.  
  13.     int a[3] = {1, 2, 1};
  14.     for(i = 1; i < 3; i++)  {
  15.         printf("i = %d\n", i);
  16.         pid = getpid();
  17.         printf("pid after i = %d\n", pid);
  18.         if((child_pid = fork()) == 0)  {
  19.             printf("In child process\n");
  20.             pid = getpid();
  21.             printf("pid in child process is %d\n", pid);
  22.             /* Is a child process */
  23.             if(a[i] < 2)  {
  24.                 printf("Should be accept\n");
  25.                 _exit(1);
  26.             } else  {
  27.                 printf("Should be reject\n");
  28.                 _exit(0);
  29.             }
  30.         }
  31.     }
  32.  
  33.     if(child_pid > 0)  {
  34.         /* Is the parent process */
  35.         pid = getpid();
  36.         printf("parent_pid = %d\n", pid);
  37.         wpid = wait(&status);
  38.         if(wpid != -1)  {
  39.             printf("Child's exit status was %d\n", status);
  40.             if(status > 0)  {
  41.                 printf("Accept\n");
  42.             } else  {
  43.                 printf("Complete parent process\n");
  44.                 if(a[0] < 2)  {
  45.                     printf("Accept\n");
  46.                 } else  {
  47.                     printf("Reject\n");
  48.                 }
  49.             }
  50.         }
  51.     }
  52.     return 0;
  53. }

No comments:

Post a Comment