- // Klaudia Kohnke
- // H6X2S1
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- int main()
- {
- /*PID procesow - (long int), w zależności od wariantu systemu operacyjnego definicja ta może być inna. Dlatego lepiej posługiwać się nazwą pid_t(zamiast int). */
- pid_t procesid2;
- pid_t procesid3;
- pid_t procesid4;
- pid_t procesid5;
- pid_t procesid6;
- pid_t procesid7;
- pid_t procesid8;
- pid_t procesid9;
- pid_t procesid10;
- switch(procesid2 = fork())
- {
- case 0:
- // Proces P2 zostal utworzony - potomek procesu macierzystego
- printf("P2 ID: %d, PPID: %d, procesy potomne nie istnieja. n", getpid(), getppid());
- exit(0); //exit(0) - oznacza poprawne zakończenie wykonania procesu
- case -1:
- printf("Blad, error!");
- exit(1); //exit(dowolna wartość różna od 0) - oznacza wystąpienie błędu
- default:
- switch (procesid3 = fork())
- {
- case 0:
- // Proces P3 zostal utworzony - potomek procesu macierzystego
- switch(procesid4 = fork())
- {
- case 0:
- // Proces P6 zostal utworzony
- printf("P6 ID: %d, PPID: %d, procesy potomne nie istnieja. n", getpid(), getppid());
- exit(0);
- case -1:
- printf("Blad, error!");
- exit(1);
- }
- switch(procesid5 = fork())
- {
- case 0:
- // Proces P7 zostal utworzony
- printf("P7 ID: %d, PPID: %d, procesy potomne nie istnieja. n", getpid(), getppid());
- exit(0);
- case -1:
- printf("Blad, error!");
- exit(1);
- }
- switch (procesid6 = fork())
- {
- case 0:
- // Proces P8 zostal utworzony
- switch(procesid7 = fork())
- {
- case 0:
- // Proces P9 zostal utworzony
- printf("P9 ID: %d, PPID: %d, procesy potomne nie istnieja. n", getpid(), getppid());
- exit(0);
- case -1:
- printf("Blad, error!");
- exit(1);
- }
- switch(procesid8 = fork())
- {
- case 0:
- // Proces P10 zostal utworzony
- printf("P10 ID: %d, PPID: %d, procesy potomne nie istnieja. n", getpid(), getppid());
- exit(0);
- case -1:
- printf("Blad, error!");
- exit(1);
- }
- printf("P8 ID: %d, PPID: %d, ID procesów potomnych: %d, %dn", getpid(), getppid(), procesid7, procesid8);
- wait(NULL);
- wait(NULL);
- exit(0);
- }
- printf("P3 ID: %d, PPID: %d, ID procesów potomnych: %d, %d, %d n", getpid(), getppid(), procesid4, procesid5,procesid6);
- wait(NULL);
- wait(NULL);
- wait(NULL);
- exit(0);
- }
- switch(procesid9 = fork())
- {
- case 0:
- // Proces P4 zostal utworzony - potomek procesu macierzystego
- printf("P4 ID: %d, PPID: %d, procesy potomne nie istnieja. n", getpid(), getppid());
- exit(0);
- case -1:
- printf("Blad, error!");
- exit(1);
- }
- switch(procesid10 = fork())
- {
- case 0:
- // Proces P5 zostal utworzony - potomek procesu macierzystego
- printf("P5 ID: %d, PPID: %d, procesy potomne nie istnieja. n", getpid(), getppid());
- exit(0);
- case -1:
- printf("Blad, error!");
- exit(1);
- }
- printf("P1 ID: %d, PPID: %d, ID procesów potomnych: %d, %d, %d, %d n", getpid(), getppid(), procesid2, procesid3, procesid9, procesid10);
- wait(NULL); // Proces 1 ma 4 potomkow, wiec
- wait(NULL); // nalezy poczekac na zakonczenie
- wait(NULL); // czterech procesow - stad funkcja wait
- wait(NULL); //
- exit(0);
- }
- return 0;
- }