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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int pid1,pid2,pid3,pid4,status,died,i,ret;
switch(pid1=fork())
{
case -1:
printf("Cant fork! C");
exit(-1);
case 0:
printf("Im a Child!");
wait(0);
switch(pid4=fork())
{
case -1: printf("Cant fork! ");
exit(-1);
case 0: printf("Im a Child!");
exit(3);
default: died=wait(&status);
printf("\nChild %d B\n",pid4);
printf("\nPID - %d and PPID - %d\n",getpid(),getppid());
printf("%d died\n",died);
printf("Exit value %d\n",status>>8);
printf("Exit status %d\n",status&0377);
}
exit(3);
default:
died=wait(&status);
printf("\nChild %d A\n",pid1);
printf("\nPID - %d and PPID - %d\n",getpid(),getppid());
printf("%d died\n",died);
printf("Exit value %d\n",status>>8);
printf("Exit status %d\n",status&0377);
}
switch(pid2=fork())
{
case -1: printf("Cant fork!\n");
exit(-1);
case 0:
printf("Im a Child! B\n");
switch(pid3=fork())
{
case -1:
printf("Cant fork!");
exit(-1);
case 0: printf("Im a Child! D");
exit(3);
default:
died=wait(&status);
}
printf("\nChild %d D\n",pid3);
printf("\nPID - %d and PPID - %d\n",getpid(),getppid());
printf("%d died\n",died);
printf("Exit value %d\n",status>>8);
printf("Exit status %d\n",status&0377);
exit(3);
default:
died=wait(&status);
}
printf("\nChild %d B\n",pid2);
printf("\nPID - %d and PPID - %d\n",getpid(),getppid());
printf("%d died\n",died);
printf("Exit value %d\n",status>>8);
printf("Exit status %d\n",status&0377);
return 0;
}
|