« »

fork-Systemaufruf

Diese Aufgabe war Teil der Klausur im Sommersemester 2025 (Zweittermin).

a)

Level 1: Wissen

Welchen Rückgabewert erhalten der Eltern- bzw. Kindprozess nach einem erfolgreichen Aufruf von fork?

Lösung

Dem Handbuch ist zu entnehmen:

❯ man 3 fork

RETURN VALUE

       Upon successful completion, fork() shall return 0 to the child
       process and shall return the process ID of the child process to
       the parent process. Both processes shall continue to execute from
       the fork() function. Otherwise, -1 shall be returned to the parent
       process, no child process shall be created, and errno shall be set
       to indicate the error.
  • Rückgabewert an den Elternprozess: Prozess-ID (PID) des neu erzeugten Kindprozesses (immer > 0)
  • Rückgabewert an den Kindprozess: 0

b)

Level 1: Wissen

Der folgende C-Code wird auf einem Unix-System ausgeführt. Die fehlenden Codeteile (#includes, Definition von main usw.) werden nicht angezeigt - nehmen Sie an, dass diese korrekt sind. Gehen Sie davon aus, dass alle fork-Systemaufrufe erfolgreich sind.

int main(){
    pid_t pid1, pid2;
    pid1 = fork();
    pid2 = fork();

    printf("A");

    if (pid1 + pid2 == 0) {
        printf("B");
        exit();
    }

    printf("C");

    return 0;
}

Wie oft wird der Buchstabe “A” von diesem Code ausgegeben?

Lösung
  • Zeile 3: Prozess 0 erzeugt Prozess 1
  • Zeile 4: Prozess 0 erzeugt Prozess 2, Prozess 1 erzeugt Prozess 3
  • Zeile 6: Prozesse 0 bis 3 geben “A” aus

→ insgesamt 4 Prozesse, alle 4 Prozesse führen printf("A") aus

c)

Level 1: Wissen

Wie oft wird der Buchstabe “C” von diesem Code ausgegeben?

Lösung
  • nur Prozess 3 erfüllt die if-Bedingung und beendet sich in Zeile 10
  • alle anderen 3 Prozesse drucken C

→ 3 Prozesse führen das printf("C") aus

d)

Level 1: Wissen

Ist es möglich, in der Ausgabe die Buchstabenfolge “BA” zu beobachten? Begründen Sie Ihre Antwort!

Lösung

Ja, “BA” ist möglich (allerdings nur als Teilsequenz in der globalen Ausgabe, nicht als zusammenhängende Ausgabe eines einzelnen Prozesses).

Begründung: Die Prozesse laufen nebenläufig ohne Synchronisation. Das Betriebssystem kann sie beliebig schedulen. Folgendes Szenario ist möglich. Betrachten wir beispielsweise folgende Ausführungsreihenfolge:

  • alle Prozesse werden bis einschließlich Zeile 4 ausgeführt
  • Prozess 3 fährt fort und druckt “A”, dann “B”
  • anschließend wird zu Prozess 0 umgeschaltet
  • Prozess 0 druckt “A”

→ globale Ausgabe enthält: …BA…

Lernziele

In dieser Aufgabe …

  • vertiefen die Studierenden durch Simulation ihr Verständnis des Systemaufrufs fork.
  • vollziehen die Studierenden mögliche Ausführungsreihenfolgen nach.