mich interessiert mal das Verhalten bei folgender Konfiguration:
2 Prozesse sind durch 2 Fifos verbunden (Lesen/Schreiben in beide
Richtungen). Einer der beiden Prozesse erzeugt über fork() noch ab und zu
einen Kindprozeß. Der Kindprozeß soll sich um die Fifos gar nicht weiter
kümmern und auch nicht die Kommunikation des Elternprozesses mit dem ersten
Programm stören.
Was passiert mit den Fifos des Elternprozesses? Die Daten des
Elternprozesses einschließlich der Fifo-"Enden" werden ja mitkopiert. Die
Fifos können ja nun nicht an einem Ende gegabelt sein. Sind die Fifos für
den Kinprozeß erstmal zu? Werden die Fifos im Elternprozeß geschlossen und
müssen dann wieder geöffnet werden? Läuft alles wie gehabt, wenn ich im
Kindprozeß die Fifos nicht anrühre? Was würde passieren, wenn der Kindprozeß
mit einem der Fifos arbeitet?
Thomas
Typischer Fall von "probieren wir's aus". Das wäre im Übrigen auch echt
deutlich viel schneller gegangen als hier ein längliches Posting
abzusetzen.
Die Lösung ist, daß die Deskriptoren mitkopiert werden und im Kind und
Vater offen bleiben. Wenn ein Kind mit einem der Fifos arbeitet, ist
das als hätte der Vater mit dem Fifo was getan.
Felix
>Elternprozesses einschließlich der Fifo-"Enden" werden ja mitkopiert. Die
>Fifos können ja nun nicht an einem Ende gegabelt sein.
Doch.
Mit fork() erzeugte Kindprozesse erben sämtliche offenen Filehandles.
>Sind die Fifos für den Kinprozeß erstmal zu?
Nein.
>Werden die Fifos im Elternprozeß geschlossen und
>müssen dann wieder geöffnet werden?
Nein.
>Läuft alles wie gehabt, wenn ich im Kindprozeß die Fifos nicht anrühre?
Ja.
>Was würde passieren, wenn der Kindprozeß mit einem der Fifos arbeitet?
Das hängt davon ab. Ohne Kenntnis der Daten läßt sich das nicht genau
sagen.
Der Kindprozess kann die Fifo-Filehandles aber schließen ohne daß die
anderen Prozesse das bemerken.
Gruß, Uwe
Ich bin eher der Typ, der versucht eine Aufgabe erstmal gedanklich
vorzubereiten, wenn er sich auf Neuland begibt. Man könnte nun beim
Probieren dieses oder jenes feststellen, das stimmt. Aber vielleicht gibt es
irgendwelche besonderen Bedingungen im Testprogramm, welche ein bestimmtes
Ergebnis erzeugen, das sich nicht verallgemeinern läßt und unter anderen
Bedingungen nicht einstellt ...
> Die Lösung ist, daß die Deskriptoren mitkopiert werden und im Kind und
> Vater offen bleiben. Wenn ein Kind mit einem der Fifos arbeitet, ist
> das als hätte der Vater mit dem Fifo was getan.
... und da ist mir obige, knappe Antwort eine große Hilfe. Vielen Dank.
Thomas
p.s. Ich poste wirklich erst, wenn Google oder alles, was ich so an
Literatur on- und offline abgeklopft habe, nichts bringen.
Knapp und präzise. Vielen Dank.
Thomas
Fast. Wenn Du im Vaterprozess das FIFO schließt, ist es immer noch (im
Kindprozess) offen, d.h., die andere Seite bekommt das nicht mit.
hp
--
_ | Peter J. Holzer |
|_|_) | Sysadmin WSR | In case of emergency break laws of physics.
| | | h...@hjp.at |
__/ | http://www.hjp.at/ | -- Stephen Baxter