Re: Welcher Prozess haengt an einer "named pipe"?

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 28 Jan 2009 16:16:19 +0100 (CET)

Matthias Teege wrote:
> > fstat(1) kann dir da weiterhelfen.

Leider nicht, da es nicht die vollständigen Dateinamen
anzeigt. Mir ist keine halbwegs portable Möglichkeit
bekannt, mit der es möglich wäre; auch lsof tut's im
Falle von FIFOs nicht, zumindest nicht auf allen Platt-
formen.

> Mein Problem ist eigentlich, dass ich verhindern möchte, dass mehrere Leser
> an einer "named pipe" hängen.

In dem Fall wäre fstat oder lsof eh nicht verlässlich,
da Du Dir eine Race-Condition einhandelst.

Ich würde einfach eine separate Lock-Datei verwenden
z.B. per Symlink. Das ist portabel und kann auch in
Shell-Skripts gemacht werden. Da bei "ln -s" das
Prüfen des Vorhandenseins und das Anlegen eine atomare
Operation bilden, gibt es keine Race-Condition.

   if ln -s $$ fifo.lock 2>/dev/null ; then
           whatever < fifo
           rm -f fifo.lock
   else
           echo "Da lauscht schon einer."
   fi

Das funktioniert natürlich nur unter kooperierenden
Prozessen, die alle den gleichen Lock-mechanismus
verwenden.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"Python is an experiment in how much freedom programmers need.
Too much freedom and nobody can read another's code; too little
and expressiveness is endangered."
        -- Guido van Rossum
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 28 Jan 2009 - 16:16:29 CET

search this site