Verständnisfrage



  • Ich hoffe ich bin hier im richtigen forum...
    ich habe kurz ne verständisfrage zu dem Thema "Prozesse erzeugen"
    ich habe hier ein kleinen ausschnitt aus programm als vorlage und verstehe die Aufgabenstellung nicht ganz.

    #include <stdio.h>
    #include <stdlib.h>
    
    struct beispiel {
             int wert1;
             int wert2;
            };
    
    int Funktion(struct beispiel *p_werte) //Soll als eigener Prozess laufen!
    {
    printf("Funktion im Kindprozess aufgerufen mit Uebergabeparameter Wert1=%d, Wert2=%d\n",p_werte->wert1,p_werte->wert2);
    return (0);
    }
    
    int Funktion_int_Par(int wert) //Soll als eigener Prozess laufen!
    {
    printf("Funktion_int_Par im Kindprozess aufgerufen mit Uebergabeparameter Wert=%d\n",wert);}
    
    int create_process(void* Funktionspointer, void* param1)
    {
    
    // ***************************************************************************
    // Hier muss der Prozess erzeugt werden, in dem die Funktionen oben ablaufen !
    // ***************************************************************************
    
    }
    

    Meine frage ist jetzt, wie ich einen Prozess erzeuge in linux und warum eigentlich diese void pointer in der funktion create_process?

    vielen dank schon mal im voraus für euere Hilfe 🙂



  • Schau dir doch mal die Systemfunktion clone() an.

    Der eine Pointer zeigt auf deine Funktion, der andere auf den Parameter, der übergeben werden soll.



  • was ist der unterschied zwischen fork() und clone()?



  • clone() ist auch für Threads, fork() ist praktisch ne abgespeckte Version von clone(). Wenn du nur nen neuen Prozess machen willst würd ich fork() empfehlen, die Bedienung ist extrem simpel



  • hame01 schrieb:

    was ist der unterschied zwischen fork() und clone()?

    ein fork() ist eine 1:1 Kopie des Prozesses, parent und child verfügen über verschiedene Kontexte (insbesondere memory space). IPC (Interprozesskomunikation) wird meistens durch Pipes gemacht.

    ein clone() ist auch eine 1:1 Kopie des Prozesses, parent und child teilen sich Teile des Kontext, darunter memory space. Deshalb werden threads damit erzeugt und soweit ich weiß, pthread basiert auch darauf.



  • Man kann bei clone() selber bestimmen was geteilt wird. Fork() ist glaub ich auch bei linux mit clone implementiert


Anmelden zum Antworten