[Berlin-wireless] S70freifunkmap
Stefan Sperling
stsp
Mi Jun 13 22:25:30 CEST 2007
On Wed, Jun 13, 2007 at 10:12:18PM +0200, Gerald Schnabel wrote:
>
>
> Stefan Sperling wrote:
> > On Tue, Jun 12, 2007 at 03:29:57AM +0200, Marco Tidow wrote:
> >> update () {
> >> # only one instance should be running at time
> >> # if exists an other one kill them and all wgets
> >> pid="$(cat /tmp/freifunkmap.pid 2>/dev/null)"
> >> if [ ! -z $pid ]; then
> >> kill $pid >/dev/null 2> /dev/null
> >> fi
> >
> > Der code killt keine falschen Prozesse solange PIDs immer
> > aufsteigend sind. Das ist bei Linux der Fall.
>
> Warum? Wenn er sich doch die PID des Vorgängerprozesses aus einer
> Datei holt.
Die Annahme, dass die PID des ehemaligen Vorgängerprozesses mittlerweile
nicht schon wieder an einen anderen Prozess vergeben worden ist hält
bei randomisierten PIDs nicht.
> Dann kann er doch auch bei randomisierten PID noch den
> hängenden Prozess killen.
So ist der Code gemeint.
Aber der Code killt nur einen Prozess mit einer PID, die in
einer Datei steht, die irgendwann mal erstellt worden ist.
Die Annahme dass da wirklich ein Prozess am hängen ist wird gar
nicht vom Code selbst überprüft. Hinter der PID könnte bei
randomisierten PIDs genausogut gerade zufällig mal ein sshd stecken.
Oops :)
> Wenn das Script erfolgreich durchgelaufen
> ist wird das PID-File gelöscht.
Das ist völlig egal.
Wirklich korrekt formal lässt sich das nur mit handfesten
Ausschlussmechanismen machen, wie z.B. einer Mutex.
Mutexes kann man sich in shell scripten wie schon gesagt z.B. mit
lockfile holen, das in C implementiert ist und somit richtige
Mutexes nutzen kann.
Hier der Anfang der lockfile man page falls dich das interessiert,
Beispielcode habe ich dir ja schonmal zukommen lassen.
NAME
lockfile - conditional semaphore-file creator
SYNOPSIS
lockfile -sleeptime | -r retries |
-l locktimeout | -s suspend | -! | -ml | -mu | filename ...
DESCRIPTION
lockfile can be used to create one or more semaphore files. If lock-
file can't create all the specified files (in the specified order), it
waits sleeptime (defaults to 8) seconds and retries the last file that
didn't succeed. You can specify the number of retries to do until
failure is returned. If the number of retries is -1 (default, i.e.,
-r-1) lockfile will retry forever.
If the number of retries expires before all files have been created,
lockfile returns failure and removes all the files it created up till
that point.
Using lockfile as the condition of a loop in a shell script can be done
easily by using the -! flag to invert the exit status. To prevent
infinite loops, failures for any reason other than the lockfile already
existing are not inverted to success but rather are still returned as
failures.
--
stefan
http://stsp.name PGP Key: 0xF59D25F0
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : nicht verfügbar
Dateityp : application/pgp-signature
Dateigröße : 187 bytes
Beschreibung: nicht verfügbar
URL : <http://lists.berlin.freifunk.net/pipermail/berlin/attachments/20070613/8d91f562/attachment.pgp>
Mehr Informationen über die Mailingliste Berlin