Befehlsbedeutung



  • fork() erzeugt eine Kopie vom Elternprozess=> Kindprozess.

    Beide haben letztendlich die selbe Funktion wozu brauche ich dann den Kindprozess wenn es nur eine Kopie vom Elternprozess ist.



  • Kannst ja was anderes machen.

    pid_t p = fork();
    if(p == -1) {
      perror("fork");
      exit(1);
    }
    else if(p == 0) {
      // Kind
    }
    else {
      // Eltern
    }
    


  • pid_t oder sowas ähnliches habe ich schon öfters gesehen. Was ist das für ein Dateityp.

    Wo ist jetzt der Unterschied ob ich es so schreibe. Kind- und Elternprozess ist ja dasselbe bzw. hat die selbe Funktion.

    pid_t p = fork();
    if(p == -1) {
      perror("fork");
      exit(1);
    }
    else if(p == 0) {
      // Eltern
    }
    else {
      // Eltern
    }
    

    edit nman: Code-Tags repariert.



  • antilinuxianer schrieb:

    pid_t oder sowas ähnliches habe ich schon öfters gesehen. Was ist das für ein Dateityp.

    Kein Dateityp, sondern einfach der Typ, den man für Prozess-IDs v erwendet. Siehe dazu auch hier: http://www.delorie.com/gnu/docs/glibc/libc_566.html

    Wo ist jetzt der Unterschied ob ich es so schreibe. Kind- und Elternprozess ist ja dasselbe bzw. hat die selbe Funktion.

    Der Unterschied wovon wozu? Rüdiger hat Dir schon ein Beispiel geliefert, ansonsten: http://www.ecst.csuchico.edu/~beej/guide/ipc/fork.html



  • @antilinuxianer
    Wenn du einen Kommentar änderst, hat das auf das Programm natürlich keine Auswirkungen. Kann es sein, dass du mit C oder Programmieren im allgemeinen wenig vertraut bist?



  • @rüdiger

    Ich habe gefragt wozu man den Kindprozess braucht wenn das nur eine Kopie vom Elternprozess ist.

    Du hast gemeint

    rüdiger schrieb:

    Kannst ja was anderes machen.

    pid_t p = fork();
    if(p == -1) {
      perror("fork");
      exit(1);
    }
    else if(p == 0) {
      // Kind=> hier steht Code vom Kindprozess
    }
    else {
      // Eltern=> hier steht Code vom Elternprozess
    }
    

    Was ist das andere. Ich sehe hier nur einen Unterschied zwischen //Eltern und //Kind.

    Aber wenn das der selbe Code ist. Ist es ja egal ob ich

    else if(p == 0)
    

    oder

    else
    

    ausführe.



  • Was ist das andere. Ich sehe hier nur einen Unterschied zwischen //Eltern und //Kind.

    Aber wenn das der selbe Code ist. Ist es ja egal ob ich ...

    Nein ist es nicht. 'Kind=> hier steht Code vom Kindprozess' wird nur vom Kindprozess ausgefuehrt. Das andere nur vom Elternprozess. Die zwei Prozesse fuehren also unterschiedlichen Code aus. Natuerlich solltest du die Kommentae durch echten (unterschiedlichen) Code ersetzen.



  • antilinuxianer schrieb:

    Aber wenn das der selbe Code ist. Ist es ja egal ob ich

    else if(p == 0)
    

    oder

    else
    

    ausführe.

    Wenn du den selben Code da reinpackst, dann ist es natürlich egal. Aber wenn du verschiedenen Code ausführen willst, dann packst du eben verschiedenen Code da rein (was man ja idR auch so macht). man: fork(2) gibt eben im Elternprozess etwas anderes zurück, als im Kindprozess.



  • [quote="knivil"]

    Die zwei Prozesse fuehren also unterschiedlichen Code aus. Natuerlich solltest du die Kommentae durch echten (unterschiedlichen) Code ersetzen.

    fork() erzeugt ja eine Kopie vom Elternprozess. => Wenn von einem Code eine Kopie erzeugt wird sind ja der Eltern- und Kindprozess gleich.

    Wenn beide Prozesse gleich sind wo ist der Unterschied ob ich den Kind oder Elternprozess ausführe.



  • bistn troll oder weisst du wirklich nicht warum man forkt ?
    falls letzteres: man benutzt es wenn man einen neuen prozess starten will. wird z.b. gerne in serverapps gemacht. wenn man keinen neuen prozess starten will lässt man einfach die finger von fork 😉


Anmelden zum Antworten