Pipe + select: wie Ende erkennen?

02/01/2009 - 02:48 von Michael Schuerig | Report spam
Ich starte in einem Elternprozess einen Kindprozess, dessen stdout über
eine Pipe mit dem Elternprozess verbunden ist. Der Elternprozess wartet
mit pselect auf Ausgaben des Kindprozesses.

Wenn der Kindprozess beendet ist, muss der Elternprozess dies erfahren.
Direkt über den lesenden Filedeskriptor geht das anscheinend nicht. Ein
SIGCHLD-Handler funktioniert grundsàtzlich, es kommt aber vor, dass bis
zu dessen Aufruf pselect mehrfach zurückgibt, dass der FD lesbar ist.
Lesbar heisst aber nicht, dass dort etwas zu holen wàre -- und so
rotieren pselect und read unnötig. Das würde ich gerne vermeiden. Geht
das?

Michael

Michael Schuerig
mailto:michael@schuerig.de
http://www.schuerig.de/michael/
 

Lesen sie die antworten

#1 Enrik Berkhan
02/01/2009 - 11:16 | Warnen spam
Michael Schuerig wrote:

Wenn der Kindprozess beendet ist, muss der Elternprozess dies erfahren.
Direkt über den lesenden Filedeskriptor geht das anscheinend nicht. Ein
SIGCHLD-Handler funktioniert grundsàtzlich, es kommt aber vor, dass bis
zu dessen Aufruf pselect mehrfach zurückgibt, dass der FD lesbar ist.
Lesbar heisst aber nicht, dass dort etwas zu holen wàre -- und so
rotieren pselect und read unnötig. Das würde ich gerne vermeiden. Geht
das?



Wenn read(2) 0 zurueckgibt bedeutet das "EOF", so wie bei sockets. Daher
wird der fd auch lesbar, wenn die andere Seite zu macht.

Gruss,
Enrik

Ähnliche fragen