AW: AW: [Vienna-pm] "combined" filehandles

Bernd Petrovitsch bernd at firmix.at
Fri Feb 4 06:13:43 PST 2005


On Fri, 2005-02-04 at 12:54 +0100, Baier Oliver wrote:
> > -----Ursprüngliche Nachricht-----
> > Von: vienna-pm-bounces at pm.org [mailto:vienna-pm-bounces at pm.org]
> > Im Auftrag von Bernd Petrovitsch
> > Gesendet: Freitag, 04. Februar 2005 12:36
> > 
> > Nein, sie kommunizieren mit einer unnamed Pipe pro Child.
> 
> das meinte ich... sry, schlecht aussgedrueckt
> 
> > Du müßtest, aber das geht so nicht (zumindest nicht auf den Unixens
> > dieser Welt).
> 
> genau, leider

Nein, das ist schon gut so.

> > Es geht, wenn du *eine* Pipe erzeugst (vor dem "foreach"), 
> > dann fork()st
> > (im "foreach") und die Filehandles auf Child-Seite geeignet 
> > schließt (eh
> > so ähnlich wie im Bsp.code).
> 
> diese Loesung klingt zwar einfach, aber leider klappt das so nicht.
> 
> der erste child-prozess kommt durch
> und beendet bei seinem Abdanken zusaetzlich die pipe, sodass die
> anderen child-prozesse nur einen geschlossenen filehandle vorfinden:
> 
> 	parent: 1360 (1)
> 	print() on closed filehandle TO_PARENT at ./test.pl line 135.
> 	print() on closed filehandle TO_PARENT at ./test.pl line 135.

Aaaaaaalso:
Auf SysCall-Level wird beim fork() der offene Filedeskriptor dupliziert
(genauso wie bei dup()/dup2()). Ein close() auf einem der beiden (egal
ob es explizit passiert oder implizit beim Tod des Prozesses) schließt
auch nur einen der beiden Filedeskriptoren (der andere ist in einem
anderen Prozeß und von ersten Prozeß nicht direkt beeinflußbar) und das
File/Pipe/Netzwerkverbindung/... bleibt letztendlich weiter offen.
Ich glaub nicht, daß da perl irgendeine subtil andere Logik drüber
pappt.
D.h. du schließt da vermutlich zu viel oder zu früh oder beides.

> hast du vielleicht noch eine Idee?

Ja, dein Source macht irgendwas immer noch nicht richtig.

	Bernd
-- 
Firmix Software GmbH                   http://www.firmix.at/
mobil: +43 664 4416156                 fax: +43 1 7890849-55
          Embedded Linux Development and Services



More information about the Vienna-pm mailing list