Zad6

🧩 Syntax:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

#define NUM_CHILDREN 5 // Definiujemy liczbę procesów potomnych

int main() {
    pid_t pid[NUM_CHILDREN]; // Deklarujemy tablicę na PIDy procesów potomnych
    int i;
    
    // Tworzenie pierwszego potomka
    pid[0] = fork(); // Wywołanie funkcji fork() tworzy proces potomny, który będzie kontynuował kod od tego miejsca
    if (pid[0] < 0) { // W przypadku błędu fork() zwróci wartość mniejszą od 0
        perror("Błąd forka"); // Wyświetlamy błąd
        exit(EXIT_FAILURE); // Kończymy program z kodem błędu
    } else if (pid[0] == 0) { // Proces potomny otrzyma wartość 0 od fork()
        // Kod pierwszego potomka
        printf("Jestem potomkiem 1, mój PID to %d, a mój rodzic to %d\n", getpid(), getppid()); // Wypisujemy informacje o procesie potomnym
        exit(EXIT_SUCCESS); // Kończymy proces potomny z kodem sukcesu
    }
    
    // Tworzenie kolejnych potomków w pętli
    for (i = 1; i < NUM_CHILDREN; i++) { // Pętla tworząca kolejne procesy potomne
        pid[i] = fork(); // Tworzymy proces potomny
        if (pid[i] < 0) { // W przypadku błędu wyświetlamy błąd i kończymy program
            perror("Błąd forka");
            exit(EXIT_FAILURE);
        } else if (pid[i] == 0) { // Proces potomny
            // Kod kolejnego potomka
            printf("Jestem potomkiem %d, mój PID to %d, a mój rodzic to %d\n", i+1, getpid(), getppid()); // Wypisujemy informacje o procesie potomnym
            exit(EXIT_SUCCESS); // Kończymy proces potomny z kodem sukcesu
        }
    }
    
    // Czekanie na zakończenie potomków
    for (i = 0; i < NUM_CHILDREN; i++) { // Pętla czekająca na zakończenie wszystkich procesów potomnych
        if (waitpid(pid[i], NULL, 0) < 0) { // Wywołujemy funkcję waitpid() z argumentem -1, aby czekać na dowolny proces potomny
            perror("Błąd waitpid"); // W przypadku błędu wyświetlamy błąd
            exit(EXIT_FAILURE); // Kończymy program z kodem błędu
        }
    }
    
    printf("Proces macierzysty kończy działanie.\n"); // Wypisujemy komunikat o końcu działania procesu macierzystego
    return 0; // Kończymy program z kodem sukcesu
}