linux-l: Frage: Koordinierung von Shell-Prozessen
Mirko Dziadzka
dziadzka at ai-lab.fh-furtwangen.de
Mo Sep 22 16:45:16 CEST 1997
On Mon, Sep 22, 1997 at 04:22:23PM +0200, Michael_Feldbinder at dara.de wrote:
>
> Hi LXer!
>
> Ich habe wieder eine kleine Frage: Wie kann ich Shell-Prozesse beim
> konkurrierend Zugriff auf eine Datei koordinieren?
Locking macht man immer mit atomaren Operation. Davon gibt es auf
Dateisystemebene nicht sehr viele. Entweder du schreibst eine kleines
C-Programm welches das locking auf C-Ebene uebernimmt (man lockf, flock,
... ), oder du benutzt auf Shell-Ebene das Kommando ln. Eine (harten)
Link anzulegen ist laut Posix eine atomare Operation (funktioniert leider
nicht immer ueber nfs :-()
Also ungefaher so:
LOCKFILE=/tmp/$LOGNAME.to_kill.lock
trap "rm -f ${LOCKFILE}.$$" 0
echo $$ > ${LOCKFILE}.$$
while ! ln ${LOCKFILE}.$$ $LOCKFILE 2> /dev/null ; do
echo wait for unlock to_kill
echo file is locked by `cat $LOCKFILE`
sleep 1
done
... do the hard work
rm $LOCKFILE
exit 0
> Das Problem (die Aufgabe ;-)
> ****************************
> Damit haben wir aber das Problem, daß 4 Prozesse sich um die Datei "
> $HOME/tmp/to_kill_liste" zanken. Also versuchte ich die üblichen Wege wie
> bei der DB-programmierung mit Filelocking:
>
> ...
> while [ -f $HOME/tmp/to_kill.lock ] ; do
> echo wait for unlock to_kill proc
> sleep 1
> done
>
> touch $HOME/tmp/to_kill.lock
> echo echo $* >> $HOME/tmp/to_kill_liste
> echo kill -9 $$ >> $HOME/tmp/to_kill_liste
> rm $HOME/tmp/to_kill.lock
> ...
> Wie man sieht ist natürlich eine zeitliche Lücke enthalten (Nach dem
> Erkennen "kein Flag-File da" bis zum erzeugen dieser Datei) und eine
> Sekunde warten für den nächsten Sperrversuch ist auch nicht sonderlich
> elegant (sleep 0.1 hätte gereicht, oder?).
>
--
++++++++++++ Linux - das beste Textadventure aller Zeiten ++++++++++++
PGP-Key available via finger -l dziadzka at zeus.ai-lab.fh-furtwangen.de or
http://www.ai-lab.fh-furtwangen.de/~dziadzka/pgp.asc
PGP fingerprint = 68 72 47 A7 4E 71 25 F0 56 02 2D 06 58 52 7D AD
Mehr Informationen über die Mailingliste linux-l