Skip to content
Snippets Groups Projects
Select Git revision
  • aeadb66c6d0dad0f3bff78acbb0c79ea05d061d4
  • master default protected
  • 2018ws
  • 2017ws
  • 2016ws
5 results

loesung-3-3.c

Blame
  • Forked from Peter Gerwinski / hp
    Source project has a limited visibility.
    make-zombies-1.c 1.37 KiB
    #include <stdio.h>
    #include <sys/wait.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    int main(void){
        pid_t pids[10]; // Platz für 10 Prozess-IDs (die Kindprozesse)
        int i; // Laufvariable
     
        for (i = 0; i < 10; ++i) {
            // Der Vaterprozess erzeugt nun einen Kindprozess,
            // welcher unabhängig vom Vaterprozess mit der
            // erneuten Ausführung des Programms beginnt.
            // Ein Kindprozess erzeugt keinen Fork von sich selbst.
            pids[i] = fork();
            if (pids[i] == 0) {
                // dann befinden wir uns in einem der 10 Kindprozesse
                // Der erste Kindprozess wartet 10 Sekunden und jeder
                // weitere Kindprozess wartet 1 Sekunde kürzer als der
                // vorige.
                printf ("%d BRAINS! ", i);
                sleep(10-i);
                exit(0); // Kindprozess erfolgreich beenden
            }
        }
    
    //
        // hier kommt nur der Vaterprozess vorbei
        for (i = 0; i < 10; ++i){
            // Der Vaterprozess wartet nun, bis der Reihe nach jeder
            // seiner 10 Kindprozesse beendet ist. Leider wird auf das
            // Kind mit der längsten Wartezeit zuerst gewartet. Obwohl
            // die anderen Kinder längst erfolgreich beendet wurden,
            // blockiert das erste Kind eine Bereinigung der Prozesstabelle
            waitpid(pids[i], NULL, 0);
        }
    //
    
    //    while (1);
        return 0; // Vaterprozess erfolgreich beenden
    }