A: Prozesse erzeugen

Aufgabe A

Falls du bislang noch nie mit der Programmiersprache C gearbeitet hast, wird es jetzt aber Zeit. (Falls du schon Erfahrung mit C hast, ist diese Aufgabe natürlich zu einfach ;-)

Unter Unix/Linux erzeugt der Befehl fork einen neuen Prozess. Denke daran: Ein fork erstellt eine exakte Kopie (Kindprozess) des aktuellen Prozesses (Elternprozess). Beide laufen anschließend weiter. Das probieren wir mit Hilfe des folgenden Quelltextes aus.

Um den Quelltext zu kompilieren benötigst du das Programm gcc. Teste, ob es bereits installiert ist. Falls nein, hole die Installation nach:
apt-get install gcc

Zum Umgang mit gcc kannst du hier nachlesen, wie beispielsweise ein "Hello World"-Programm kompiliert wird:
http://www.oreilly.de/german/freebooks/rlinux3ger/ch132.html


#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int pid;

    pid = fork();

    if (pid == 0)
    {
        printf("\n\nHier ist der Kindprozess mit ID %d!\n\n", getpid());
        exit (0);
    }
    else if (pid > 0)
    {
        printf("\n\nHier ist der Elternprozess mit ID %d!\n\n", getpid());
        exit (0);
    } else {
        printf("\n\nIrgendetwas hat einen Fehler verursacht.\n\n");
        exit (1);
    }

    return 0;
}

Aufgabe B

Was passiert eigentlich bei mehrmaligem Aufruf von fork()? Wir sollten es ausprobieren. Kompiliere den folgenden Quelltext und führe ihn aus.

Bevor du das Beispielprogramm startest: Was denkst du, wie viele Prozesse werden tatsächlich erzeugt? Notiere doch mal deine Prognose...


#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int pid;

    pid = fork();
    pid = fork();
    pid = fork();
    pid = fork();

    printf("Hier ist ein Prozess mit ID %d!\n", getpid());
    return 0;
}

Ein ähnliches Beispielprogramm mit mehreren fork()-Aufrufen findest du hier:
http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel2b.shtml#2_4
Dort bekommst du zusätzlich auch noch ein paar hilfreiche Erläuterungen.