C   65

forkdeep

Guest on 1st June 2022 01:33:07 AM

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/wait.h>
  5.  
  6. int count = 0;
  7. int level = 0;
  8. void dofork();
  9.  
  10. void
  11. tablevel()
  12. {
  13.   int i;
  14.   for (i = 0; i < level; i++)
  15.     printf("        ");
  16. }
  17.  
  18. void
  19. child()
  20. {
  21.   level++;
  22.   tablevel();
  23.   printf("%8d\n", (int) getpid());
  24.   if (level < count)
  25.     dofork();
  26.   else if (level == count)
  27.     sleep(3);
  28. }
  29.  
  30. void
  31. parent(int childpid)
  32. {
  33.   int status;
  34.   tablevel();
  35.   printf("%8d->%6d\n", (int) getpid(), childpid);
  36.   waitpid(childpid, &status, 0);
  37. }
  38.  
  39. void
  40. dofork()
  41. {
  42.   int rc = fork();
  43.   if (rc < 0) {
  44.     perror("fork failed: ");
  45.     exit(1);
  46.   } else if (rc == 0) {
  47.     child();
  48.   } else {
  49.     parent(rc);
  50.   }
  51. }
  52.  
  53. int
  54. main(int argc, char *argv[])
  55. {
  56.   count = atoi(argv[1]);
  57.   dofork();
  58.   tablevel();
  59.   printf("%8d\n", (int) getpid());
  60. }

Raw Paste


Login or Register to edit or fork this paste. It's free.