[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