fork()



  • Hallo,

    stimmt es dass bei ls ein fork() ausgefuehrt wird ?
    Ich find fork() lustig. Alles wird kopiert, aber alles was vor fork() kam, wird eh nicht mehr ausgefuhert.



  • ja bei ls wird ein fork ausgeführt, bei allem anderen auch.
    aber was ist daran so lustig, dass der programmcode getauscht wird? sind schon wieder schulferien oder so?



  • fork() wird benutzt um einen Prozess zu duplizieren. Warum muss bei ls ein fork aufgerufen werden. Versteh ich nicht. Wuerde ja bedeuten ls laeuft als eigener prozess. Oder wird nur ein Thread erzeugt ?



  • Fork wird auch genutzt, um andere Programme (also keine Kopien des aufrufenden Programms) zu starten.
    Hierzu ruft nach dem Fork einer der Prozesse (in der Regel der Kindprozess) einen entsprechenden Befehl (z. B. execve) auf,
    wodurch der aufrufende Prozess durch das gewünschte Programm ersetzt wird.
    Ein Beispiel: der Benutzer hat eine Shell geöffnet und möchte sich mittels des Befehls ls den aktuellen Verzeichnisinhalt anzeigen lassen.

    verstehn tu ich das trotzdem nicht. Die Shell erzeugt eine kopie von sich nur um ls auszufuehren. hm.
    Ein kind prozess ist doch total unabhaengig. hat mit dem elternprozess nichts mehr zu tun, Wenn ich den Eltern prozess loesche passiert nichts.



  • wie soll das denn sonst laufen? meinst du, dass du in der shell sowas hast

    if(!strcmp(command, "ls"))
    {
         //mach was
    }
    

    und bei jeden neu hinzugefügten kommando alles neu compiliert werden soll?

    mit fork rufst du dann ganz bequem das programm "ls2", "cd2" oder was auch immer auf und hast maximale flexibilität, ohne die shell selbst verändern zu müssen.



  • Hab das gerade gelesen. Wie ist das zu verstehen.

    Linux Betriebssystem läuft dank seiner Architektur immer gleich schnell.