#include #include #include #include #include int main () { int pid; int i; pid = fork (); if (pid) { /* Parent */ sleep (10); printf ("Killing Children (SIGTERM)\n"); if (kill (-pid, SIGTERM) < 0) perror ("kill (SIGTERM)"); printf ("Done\n"); sleep (5); printf ("Killing Children (SIGKILL)\n"); if (kill (-pid, SIGKILL) < 0) perror ("kill (SIGKILL)"); printf ("Done\n"); exit (0); } else { /* Child */ if (setpgrp () < 0) { perror ("setpgrp"); kill (getppid (), SIGTERM); exit (1); } printf ("Process Group created\n"); for (i=0; i<2; ++i) { int pid2; pid2 = fork(); if (pid2<0) perror ("fork()"), exit(2); /* Grandchilds */ if (pid2 == 0) { printf ("Hi: My PID is %d\n", (int)getpid ()); sleep (100); printf ("Terminating normally: %d %d\n", (int)getpid (), (int)getppid ()); exit(0); } } exit(0); } return 0; }