Mehrere Prozesse erzeugen



  • Hi!

    Wie kann ich mit fork() mehrere Prozesse erzeugen. In den Beispielen die ich gefunden habe, steht zwar immer, das ein Parent mehrere Childs haben kann, aber nirgends ist erwähnt wie man das macht!?

    Danke



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wie kannst Du mehrere Dateien öffnen? Genau, indem Du mehrmals open() aufrufst.

    Und wie erzeugst Du mehrere Prozesse? Genau! Du musst fork() im Mutterprozess ein zweites Mal aufrufen.



  • man: fork() splittet deinen Prozess in zwei auf, die unabhängig voneinander weiterlaufen können - anschließend kannst du anhand des Rückgabewertes unterscheiden, in welchem dieser Prozesse du dich aufhältst:

    int id=fork();
    switch(id)
    {
    case -1:
      printf("Fehler im fork()-Aufruf\n");break;
    case  0:
      printf("Ich bin der Kind-Prozess\n");break;
    default:
      printf("Ich bin der Parent-Prozess - Kind hat die ID %d",id);
    }
    


  • LordJaxom schrieb:

    Wie kannst Du mehrere Dateien öffnen? Genau, indem Du mehrmals open() aufrufst.

    Und wie erzeugst Du mehrere Prozesse? Genau! Du musst fork() im Mutterprozess ein zweites Mal aufrufen.

    Soweit ist mir das klar, nur weiss ich nicht, wie ich dynamisch eine Anzahl von n-Prozessen erzeugen kann. Weil wenn ich im Mutterprozess weitere Prozesse erzeuge muss man ja aufpassen, dass die Kinder den gleichen Code nicht mehr ausführen.
    Das ist ein bischen verwirrend für mich, welchen Code die Kinder dann ausführen.

    Hintergrund ist, einen sogenannten Forking-Server zu schreiben, der eben die Clients in eigene Prozesse auslagert

    danke



  • Naja, anhand der Rückgabe (s. CStoll) kannst Du ja feststellen, ob Du im Kind bist. Dort muss das Programm am Ende natürlich verlassen werden. Wie Du den Kindern dann einzelne Aufgaben zuteilst, ist eine andere Sache.

    Achtung Beispielcode ohne Fehlerbehandlung.

    int anzahl = 10; // Anzahl zu startender Prozesse
    
    for (int i = 0; i < anzahl; ++i) {
        int pid = fork();
        if (pid == 0) { // Kindprozess
            do_work_child(i);
            _exit(127); // Prozess beenden
        }
    
        // Vaterprozess darf weiter schleifen
    }
    

Anmelden zum Antworten