Kontrola jedinecnosti procesu

Martin Mačok martin.macok na underground.cz
Pátek Říjen 20 09:27:44 CEST 2000


On Fri, Oct 20, 2000 at 08:07:48AM +0200, Mikulas Gangur wrote:
> Dobry den,
> 
> dekuji vsem za pomoc. Nakonec jsem to vyresil nasledujicim zpusobem a
> chodi to.
> 
> 
> ...
> TMP=lock.$$
> LOCK=lock
> ....
> 
> > if [ -f $LOCK.* ]; then

 (A)

> >  $ECHO "$IDENT: $PROGRAM jiz bezi"
> >  exit
> > fi
> >
> > trap "$RM -f $TMP; trap 0; exit 1" 1 2 3 15
> > trap "$RM -f $TMP; exit 0" 0

 (B)

> > $CAT /dev/null > $TMP

A co kdyz se nejakym nedopatrenim (murphy) pusti ty 2 instance toho
skriptu temer zaroven a potkaji se v sekci mezi A a B, tedy ani jedne
neuspeje test pred A, tedy oba pokracuji za B a nepoznaji, ze byly
spusteny zaroven. Rika se tomu race conditions (cesky casove zavisle
chyby (ulitaci tomu rikaji rasove podminky)) a je to jeden z duvodu,
proc jsem v puvodnim prispevku pouzil mkdir || exit.

bye

P.S. Pokud se vam to nechce psat, tak se kouknete do
/etc/rc.d/init.d/functions (alespon u Red Hata) a pouzijte to. Staci na
zacatek skriptu pripsat
. /etc/rc,d./init.d/functions
 a pak uz muzete ty funkce ve skriptu pouzivat. Jine reseni muze byt
 pouziti setlock z daemontools (http://cr.yp.to/), jak me v soukromem
 emailu upozornil Petr Novotny.

-- 
< Martin Mačok    .-=  martin.macok na underground.cz  =-.   < iso-8859-2 > 
  \\. http://kocour.ms.mff.cuni.cz/~macok/  http://underground.cz/ .//
    \\\..         `-=    t.r.u.s.t   n.0  o.n.e     =-'        ..///


Další informace o konferenci Linux