[linux] Re: voorkomen dat een proces twee keer start.

Ton Smeele ton op superspace.nl
Ma Jun 19 23:46:22 CEST 2006


On Mon, 2006-06-19 at 16:40 +0200, Ronald Nooij wrote:

> Ik heb perl script gemaakt dat maar één keer mag draaien. Het is dus niet
> toegestaan om een twee instaties op te starten.

Perl heeft hiervoor een simpele en zeer doeltreffende lock oplossing en
de flock sub wordt standaard bij Perl distributies meegeleverd:

use Fcntl qw(:flock :DEFAULT);

sub lockexclusive_nowait {   # try an exclusive lock, do not wait
   my ($semfile)=@_;
   open(SEM,">$semfile") || return 0;  # lock failed
   flock(SEM,LOCK_EX|LOCK_NB) || return 0;
   return 1;
}

sub unlock {
   close(SEM);
   return 1;
}


Gebruiken van de subroutine gaat simpel:

...
# test of we de enige zijn
if (!lock_exclusive_nowait('lockfile.sem') {
   die "Ons programma was al actief met een ander proces!";
# ja we zijn alleen
...


De file 'lockfile.sem' is een leeg bestand dat voor dit programma
gereserveerd wordt en ddoor Perl gebruikt wordt bij het locken.

Unlock is wel netjes maar niet eens nodig, want als een Perl programma
wordt beeindigd (goedschikt of kwaadschiks) worden alle locks zowieso
vrijgegeven.

Suc6 Ronald,

Ton




More information about the Linux mailing list