Frage zur Ausgabe eines Programmcodes



  • Hey, ich hoffe mir kann jemand helfen zu verstehen was bei folgendem Programmcode als Ausgabe erscheint:

    #include <stdio.h>
    #include <unistd.h>
    
    int x =0;
    int main(){
    fork();
    fork();
    fork();
    printf("pid=%d x=%d\n", getpid(), x++);
    }
    

    Und zwar hätte ich erwartet das die jeweile PID des Prozesses ausgegeben wird und x halt jeweils hochgezählt wird, oder das bei allen Prozessen x = 1 ist, aber wenn ich das Programm kompiliere ist bei allen Prozessen x = 0. Kann mir jemand helfen das irgendwie zu verstehen ?



  • Bobbi Bob schrieb:

    Und zwar hätte ich erwartet das die jeweile PID des Prozesses ausgegeben wird und x halt jeweils hochgezählt wird, oder das bei allen Prozessen x = 1 ist

    Also eine "oder"-Erwartung ist schonmal merkwürdig 😕

    Die jeweilige PID kommt doch raus. Aber warum erwartest du andere Ausgaben als x=0? fork kopiert den Prozess, nach einem fork hast du also zwei unabhängige Variablen x, eine in jedem der Prozesse. Die sind dann beide 0. Wenn du x in einem Prozess änderst, hat das keine Auswirkungen auf die anderen Prozesse. Und wie und warum sollte überall x=1 herauskommen?

    Und drei forks hintereinander machen dir 8 Prozesse. Normalerweise macht es auch Sinn, die Rückgabe von fork zu überprüfen, um zwischen Kind, Elternteil und Fehler zu unterscheiden.



  • man könnte noch darauf hinweisen, dass es in C++ auch standardmittel fürs multithreading gibt, zwecks portabilität...



  • ddavie schrieb:

    man könnte noch darauf hinweisen, dass es in C++ auch standardmittel fürs multithreading gibt, zwecks portabilität...

    Was hat der gezeigte Code mit Multithreading zu tun?



  • man kann nur raten, was der OP meint. außerdem immerhin mehr als mit C++.



  • Man sollte noch anmerken, dass x++ nicht 1 ergibt, sondern 0, welche weiter an printf (in C++??) gegeben wird. Informiere dich mal über Präfix- und Suffixinkrement- ubd dekrementoperatoren.


Anmelden zum Antworten