Frage zu fork()



  • Nabend,

    habe gerade gelesen, daß bei diesem Programm zweimal die Meldung hallo fork() ausgegeben werden:

    #include <sys/types.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    int main()
    {
     pid_t pid;
     char text[] = "Hallo fork()\n";
    
     write(STDOUT_FILENO, text, strlen(text));
    
     switch(pid=fork())
      {
        case -1: printf("Fehler bei fork().....\n"); exit(0);
        case  0: printf("Ich bin das Kind\n"); break;
        default: printf("Ich bin der Elternprozess\n"); break;
      }
     exit(0);
    }
    

    Wird es bei mir aber nicht. Und das ist acuh gut so,d enn ich hab fork() so verstanden, daß der Kindprozess quasi da weitermacht, wo fork() im Parent-Prozess aufgerufen wurde (alles andere wäre ja auch theoretisch unsinnig, weil jedes beliebige Programm dann ewig und endlos lang fork()en würde).

    Irrt sich da nun der Pronix-Typ oder müsste hier "Hallo fork()" eigentlich doch zweimal ausgegeben werden (was ich mir wie gesagt kaum vorstellen kann)



  • Hallo Fork wird definitiv nur einmal ausgegeben. Beim fork wird der Prozess verdoppelt udn erst von da an laufen beide Prozesse getrennt 🙂



  • Vorsicht !
    Die Processe laufen nicht getrennt da sie die selben geöffneten Dateien etc. haben.
    Der Eltenpr. darf sich nicht vor dem Kindprocess beenden sonst gibts einen Zombie.



  • Original erstellt von Unix-Tom:
    Vorsicht !
    Die Processe laufen nicht getrennt da sie die selben geöffneten Dateien etc. haben.
    Der Eltenpr. darf sich nicht vor dem Kindprocess beenden sonst gibts einen Zombie.

    Das verstehe ich nicht. Kannst Du das ggf. etwas genauer beschreiben?



  • wenn du ps u aufrufst und ein prozess so

    [kind <defunkt>]

    aussieht hast du einen Zombieprozess.

    Prozesse verwenden zum Beenden die return-Anweisung oder rufen die Funktion exit() mit einem Wert auf, der an das Betriebssystem zurückgeliefert wird. Das Betriebssystem lässt den Prozess so lange in seiner Prozesstabelle eingetragen, bis entweder der Elternprozess des Prozesses den zurückgelieferten Wert liest oder der Elternprozess selbst beendet wird. Ein Zombie-Prozess ist in diesem Sinne ein Prozess, der zwar beendet wurde, dessen Elternprozess den Exit-Wert des Kindes aber noch nicht gelesen hat. Erst wenn der Elternprozess beendet wird, wird auch der Zombie-Prozess aus der Prozesstabelle des Betriebssystems entfernt.

    www.netzmafia.de/skripten/server/syscalls.html

    MFG eiskalt

    [ Dieser Beitrag wurde am 16.06.2003 um 12:20 Uhr von eiskalt editiert. ]


Anmelden zum Antworten