Advertisement
Guest User

kacperG

a guest
Jan 17th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. /*
  2. Program operujący na procesach
  3. Kacper Golen
  4. I8X1N1
  5. */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <sys/wait.h>
  10.  
  11. int main()
  12. {
  13. int pid2 = fork(); //w programie to co zwraca fork przypisuje do zmiennej
  14. int pid3,pid4,pid5,pid6,pid7,pid8,pid9,pid10; //zmienne przechowujace ID procesow
  15.  
  16.  
  17. switch(pid2)//za pomoca switch'y ( tego i kolejnych) bede operowal na procesach. case 0 to zawsze proces potomny, natomiast default to procesowanie procesu nadrzednego
  18. {
  19.  
  20. case 0://jesli fork zwrocil 0, tzn ze jest to proces potomny
  21.  
  22. pid5=fork();//powolywanie procesu potomnego p5
  23.  
  24. /*z perspektywy p5, p2 jest procesem nadrzednym*/
  25.  
  26. switch(pid5)
  27. {
  28. case 0:
  29. printf("P5:%d:%d\n",getpid(),getppid());
  30. exit(0);
  31. break;
  32. case -1:
  33. printf("Fork sie nie powiodl!");
  34. exit(-1);
  35. break;
  36. default:
  37. printf("P2:%d:%d:%d\n",getpid(), getppid(),pid5);
  38. wait(NULL);//oczekiwanie na proces potomny
  39. exit(0);
  40. break;
  41.  
  42. }
  43.  
  44. case -1://fork zwraca -1 w przypadku bledu
  45. printf("Fork sie nie powiodl!!!");
  46. exit(1);
  47. break;
  48. default://fork zwraca id procesu potomnego do procesu nadrzednego
  49.  
  50. pid3=fork();//tworzenie kolejnego procesu potomnego z P1
  51.  
  52. switch(pid3)
  53. {
  54. case 0: //proces potomny P3
  55. pid6=fork(); // tworzenie procesu P6
  56. switch(pid6)
  57. {
  58. case 0://w procesie potomnym fork zwraca 0
  59. pid7=fork();//tworzenie procesu potomnego p7. proces nadrzedny p6
  60.  
  61. switch(pid7)
  62. {
  63. case 0://proces p7
  64. pid9=fork();
  65. switch(pid9)
  66. {
  67. case 0://proces p9
  68.  
  69. printf("P9:%d:%d\n",getpid(),getppid());
  70. exit(0);
  71. break;
  72. case -1:
  73.  
  74. printf("Fork sie nie powiodl!");
  75. exit(1);
  76. break;
  77.  
  78. default:
  79. pid10=fork();
  80. switch(pid10)//kolejny switch procesowany jak inne
  81. {
  82. case 0://proces p10
  83. printf("P10:%d:%d\n",getpid(),getppid());
  84. exit(0);
  85. break;
  86.  
  87. case -1:
  88. printf("Fork sie nie powiodl!!");
  89. exit(1);
  90. break;
  91.  
  92. default:
  93.  
  94. printf("P7:%d:%d:%d,%d\n",getpid(),getppid(),pid9,pid10);
  95. wait(NULL);//oczekiwanie na zakonczenie procesow potomnych (w tym przypadku P9 i P10)
  96. wait(NULL);
  97. exit(0);
  98. break;
  99. }
  100. }
  101. case -1:
  102. printf("Fork sie nie powiodl!@");
  103. exit(1);
  104. break;
  105. default:
  106. pid8=fork();//tworzenie kolejnego procesu podrzednego p8 (proces nadrzedny p6)
  107. switch(pid8)
  108. {
  109. case 0://proces p8
  110. printf("P8:%d:%d\n",getpid(),getppid());
  111. exit(0);
  112. break;
  113. case -1:
  114. printf("Fork sie nie powiodl!!!");
  115. exit(1);
  116. break;
  117. default:
  118. printf("P6:%d:%d:%d,%d\n",getpid(),getppid(),pid7,pid8);
  119. wait(NULL);//oczekiwanie na zakonczenie procesow potomnych (w tym przypadku P7 i P8)
  120. wait(NULL);
  121. exit(0);
  122. break;
  123. }
  124. }
  125. case -1://error
  126. printf("Fork zakonczony niepowodzeniem");
  127. exit(1);
  128. break;
  129. default://proces nadrzedny dla p6 (czyli p3)
  130. printf("P3:%d:%d:%d\n",getpid(),getppid(),pid6);
  131. wait(NULL);
  132. exit(0);
  133. break;
  134. }
  135. case -1://error
  136. printf("Fork sie nie podiodl!!!");
  137. exit(1);
  138. break;
  139.  
  140. default:
  141.  
  142. pid4=fork();//tworzenie kolejnego procesu potomnego z P1
  143.  
  144. switch(pid4)
  145. {
  146. case 0://proces potomny
  147. printf("P4:%d:%d\n",getpid(),getppid());
  148. exit(0);
  149. break;
  150. case -1://error
  151. printf("Fork sie nie powiodl");
  152. exit(1);
  153. break;
  154. default://printowanie kompletnego P1 (z procesami potomnymi)
  155. printf("P1:%d:%d:%d,%d,%d\n",getpid(),getppid(),pid2,pid3,pid4);
  156. wait(NULL);
  157. wait(NULL);
  158. wait(NULL);
  159. exit(0);
  160. break;
  161.  
  162.  
  163. }
  164. break;
  165. }
  166.  
  167. break;
  168. }
  169.  
  170. return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement