// Klaudia Kohnke // H6X2S1 #include #include #include #include #include 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, %d\n", 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; }