Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Program operujący na procesach
- Kacper Golen
- I8X1N1
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/wait.h>
- int main()
- {
- int pid2 = fork(); //w programie to co zwraca fork przypisuje do zmiennej
- int pid3,pid4,pid5,pid6,pid7,pid8,pid9,pid10; //zmienne przechowujace ID procesow
- 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
- {
- case 0://jesli fork zwrocil 0, tzn ze jest to proces potomny
- pid5=fork();//powolywanie procesu potomnego p5
- /*z perspektywy p5, p2 jest procesem nadrzednym*/
- switch(pid5)
- {
- case 0:
- printf("P5:%d:%d\n",getpid(),getppid());
- exit(0);
- break;
- case -1:
- printf("Fork sie nie powiodl!");
- exit(-1);
- break;
- default:
- printf("P2:%d:%d:%d\n",getpid(), getppid(),pid5);
- wait(NULL);//oczekiwanie na proces potomny
- exit(0);
- break;
- }
- case -1://fork zwraca -1 w przypadku bledu
- printf("Fork sie nie powiodl!!!");
- exit(1);
- break;
- default://fork zwraca id procesu potomnego do procesu nadrzednego
- pid3=fork();//tworzenie kolejnego procesu potomnego z P1
- switch(pid3)
- {
- case 0: //proces potomny P3
- pid6=fork(); // tworzenie procesu P6
- switch(pid6)
- {
- case 0://w procesie potomnym fork zwraca 0
- pid7=fork();//tworzenie procesu potomnego p7. proces nadrzedny p6
- switch(pid7)
- {
- case 0://proces p7
- pid9=fork();
- switch(pid9)
- {
- case 0://proces p9
- printf("P9:%d:%d\n",getpid(),getppid());
- exit(0);
- break;
- case -1:
- printf("Fork sie nie powiodl!");
- exit(1);
- break;
- default:
- pid10=fork();
- switch(pid10)//kolejny switch procesowany jak inne
- {
- case 0://proces p10
- printf("P10:%d:%d\n",getpid(),getppid());
- exit(0);
- break;
- case -1:
- printf("Fork sie nie powiodl!!");
- exit(1);
- break;
- default:
- printf("P7:%d:%d:%d,%d\n",getpid(),getppid(),pid9,pid10);
- wait(NULL);//oczekiwanie na zakonczenie procesow potomnych (w tym przypadku P9 i P10)
- wait(NULL);
- exit(0);
- break;
- }
- }
- case -1:
- printf("Fork sie nie powiodl!@");
- exit(1);
- break;
- default:
- pid8=fork();//tworzenie kolejnego procesu podrzednego p8 (proces nadrzedny p6)
- switch(pid8)
- {
- case 0://proces p8
- printf("P8:%d:%d\n",getpid(),getppid());
- exit(0);
- break;
- case -1:
- printf("Fork sie nie powiodl!!!");
- exit(1);
- break;
- default:
- printf("P6:%d:%d:%d,%d\n",getpid(),getppid(),pid7,pid8);
- wait(NULL);//oczekiwanie na zakonczenie procesow potomnych (w tym przypadku P7 i P8)
- wait(NULL);
- exit(0);
- break;
- }
- }
- case -1://error
- printf("Fork zakonczony niepowodzeniem");
- exit(1);
- break;
- default://proces nadrzedny dla p6 (czyli p3)
- printf("P3:%d:%d:%d\n",getpid(),getppid(),pid6);
- wait(NULL);
- exit(0);
- break;
- }
- case -1://error
- printf("Fork sie nie podiodl!!!");
- exit(1);
- break;
- default:
- pid4=fork();//tworzenie kolejnego procesu potomnego z P1
- switch(pid4)
- {
- case 0://proces potomny
- printf("P4:%d:%d\n",getpid(),getppid());
- exit(0);
- break;
- case -1://error
- printf("Fork sie nie powiodl");
- exit(1);
- break;
- default://printowanie kompletnego P1 (z procesami potomnymi)
- printf("P1:%d:%d:%d,%d,%d\n",getpid(),getppid(),pid2,pid3,pid4);
- wait(NULL);
- wait(NULL);
- wait(NULL);
- exit(0);
- break;
- }
- break;
- }
- break;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement