mal ein paar Fragen zu fork()



  • uhm krass, an dem lags jetzt auch 0_o
    nu funktionierts auch mit dem IF-Block dran, so wie ichs wollte 😉

    tausend Dank!



  • Hi Leute 🙂

    Ich weiss hat jetzt nichts mit dem Thema zu tun, aber das muss ich jetzt ma loswerden:

    Ich wollt ma ponto grüssen und loben, da er mir (und auch anderen) schon mehrmals
    mit seinen kompetenten Hilfen aus der Kleme geholfen hat :), ob einfach oder
    (meiner Meinung nach) shweer. Gruss 🙂

    ps:Doch nicht zu vernachlässigen Die Anderen,
    die mir schon mehrmals geholfen haben. Vielen Dank auch an Sie 🙂



  • LOL



  • Hi ich hab auch ma 2 fragen zu fork:

    1.)Wenn ich mitels pipe pipes erzeuge, wobei der parent prozess der schreibende ist,
    sind dann ale child-prozesse in der lage daraus zu lesen? Wenn ja, dann ist das so, wenn ein childprozess diesen datensatz bereitz rausgeholt hat, der nächste
    ihn dan nicht mehr lesen kann (das will ich erreichen)?
    2.)Wenn ne variable ein pointer, mit ner bestimmten addr als inhalt, ist.
    Und dann geforkt wird, kann der childprozess dann auf den gleichen speicherbereich
    zugreifen (mitels des pointers) wie der parentprozess? Oder zeigt die addr
    auf ne andere speicherstell im virtuellen speicher?



  • linu(x)bie schrieb:

    Hi ich hab auch ma 2 fragen zu fork:

    1.)Wenn ich mitels pipe pipes erzeuge, wobei der parent prozess der schreibende ist,
    sind dann ale child-prozesse in der lage daraus zu lesen? Wenn ja, dann ist das so, wenn ein childprozess diesen datensatz bereitz rausgeholt hat, der nächste
    ihn dan nicht mehr lesen kann (das will ich erreichen)?

    ja, ja.

    2.)Wenn ne variable ein pointer, mit ner bestimmten addr als inhalt, ist.
    Und dann geforkt wird, kann der childprozess dann auf den gleichen speicherbereich
    zugreifen (mitels des pointers) wie der parentprozess? Oder zeigt die addr
    auf ne andere speicherstell im virtuellen speicher?

    ja, nein.



  • linu(x)bie schrieb:

    2.)Wenn ne variable ein pointer, mit ner bestimmten addr als inhalt, ist.
    Und dann geforkt wird, kann der childprozess dann auf den gleichen speicherbereich
    zugreifen (mitels des pointers) wie der parentprozess? Oder zeigt die addr
    auf ne andere speicherstell im virtuellen speicher?

    Der Pointer ist der gleiche und er zeigt auf den gleichen Inhalt. Wenn jedoch der Parent oder das Child den Inhalt ändert, gilt diese Änderung nur beim ändernden Prozess.



  • @SGI danke

    SG1 schrieb:

    linu(x)bie schrieb:

    Wenn ne variable ein pointer, mit ner bestimmten addr als inhalt, ist.
    Und dann geforkt wird, kann der childprozess dann auf den gleichen speicherbereich
    zugreifen (mitels des pointers) wie der parentprozess? Oder zeigt die addr
    auf ne andere speicherstell im virtuellen speicher?

    ja, nein.

    Kann ich dann das so verstehen, dass die Speicherstelle als Schnittstelle
    zwischen diesen parentprozess und den childprozess dienen kann? Oder ist der Speicherbereich irgendwie geschützt? Wenn das funktionieren würde,
    da kann ich mir die pipes ja sparen 😃

    thx 🙂



  • Ponto schrieb:

    linu(x)bie schrieb:

    2.)Wenn ne variable ein pointer, mit ner bestimmten addr als inhalt, ist.
    Und dann geforkt wird, kann der childprozess dann auf den gleichen speicherbereich
    zugreifen (mitels des pointers) wie der parentprozess? Oder zeigt die addr
    auf ne andere speicherstell im virtuellen speicher?

    Der Pointer ist der gleiche und er zeigt auf den gleichen Inhalt. Wenn jedoch der Parent oder das Child den Inhalt ändert, gilt diese Änderung nur beim ändernden Prozess.

    achso da war meine Hoffnung vergebens 😞



  • linu(x)bie schrieb:

    Ponto schrieb:

    Der Pointer ist der gleiche und er zeigt auf den gleichen Inhalt. Wenn jedoch der Parent oder das Child den Inhalt ändert, gilt diese Änderung nur beim ändernden Prozess.

    achso da war meine Hoffnung vergebens 😞

    Ich würde bei den Pipes bleiben. Sie sind einfach, effizient und man kann eigentlich nichts falsch machen. Es gibt noch viele andere Möglichkeiten der Interprozess Kommunikation (IPC), auch welche, die über gleichen Speicher gehen, aber das ist dann meistens komplizierter. Vor allem wenn man sich zusätzlich um die synchronisation kümmern muss, kann man froh sein, dass das der Kernel bei den Pipes für einen macht.



  • Eine ganze Menge zu fork(), Pipes, FIFOs, Shared Memory, Threads usw. findest du - an vielen Beispielen gerade für Einsteiger erklärt - auch in dem Buch "C und Linux" 😉

    Martin


Anmelden zum Antworten