Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

n'autoriser qu'une seule exécution d'un .pl à la fois

8 réponses
Avatar
Pierre-Yves
Bonjour,

Je souhaiterais empêcher l'exécution simultanée d'un programme perl. En
gros lors de l'exécution de mon programme je voudrais qu'il vérifie si il
n'y a pas déjà un process de ce programme qui est entrain de s'exécuter.

Est-ce que quelqu'un peut me dire comment faire ?

Je vous remercie,
P-Yves.

8 réponses

Avatar
Laurent Wacrenier
Pierre-Yves <> écrit:
Je souhaiterais empêcher l'exécution simultanée d'un programme perl. En
gros lors de l'exécution de mon programme je voudrais qu'il vérifie si il
n'y a pas déjà un process de ce programme qui est entrain de s'exécuter.

Est-ce que quelqu'un peut me dire comment faire ?


En posant un vérou : perldoc -f flock

Avatar
thomas mersenne
au démarrage de ton script,
tu vérifies la présence d'un fichier flag dans le répertoire courant,
si oui, exit
si non, tu mets en place ce fichier flag
en sortie de script tu supprimes le fichier flag


TM.


"Pierre-Yves" <pyu-at-belbone.be> a écrit dans le message de news:
4045ffc7$0$313$
Bonjour,

Je souhaiterais empêcher l'exécution simultanée d'un programme perl. En
gros lors de l'exécution de mon programme je voudrais qu'il vérifie si il
n'y a pas déjà un process de ce programme qui est entrain de s'exécuter.

Est-ce que quelqu'un peut me dire comment faire ?

Je vous remercie,
P-Yves.




Avatar
jl_morel
Dans l'article <4045ffc7$0$313$, pyu-at-belbone.be a
dit...

Je souhaiterais empêcher l'exécution simultanée d'un programme perl. En
gros lors de l'exécution de mon programme je voudrais qu'il vérifie si il
n'y a pas déjà un process de ce programme qui est entrain de s'exécuter.

Est-ce que quelqu'un peut me dire comment faire ?



Sous Windows, on peut utiliser Win32::Mutex
(en standard avec ActivePerl)
La doc en français :

http://www.bribes.org/perl/docfr/win32mutex.html

(Avec la méthode wait on peut même faire attendre le deuxième script
jusqu'à ce que le premier soit terminé)

#!/usr/bin/perl -w
use strict;
use Win32::Mutex;

die "Tourne deja !n" if Win32::Mutex->open("mon_script");

my $mutex = Win32::Mutex->new(1, "mon_script");

print "Appuyez sur [enter] pour terminer...n";
<STDIN>;

$mutex->release;

__END__

HTH

--
J-L.M.

Avatar
dominix
"Pierre-Yves" <pyu-at-belbone.be> a écrit:
Bonjour,

Je souhaiterais empêcher l'exécution simultanée d'un programme perl.



thomas mersenne wrote:
au démarrage de ton script,
tu vérifies la présence d'un fichier flag dans le répertoire courant,


merci de poster a l'endroit sur Usenet, c'est a dire APRES le texte du
posteur auquel on repond.

-- dominix


Avatar
Pierre-Yves
"dominix" @despammed.com> wrote in message
news:40462a9c$0$21682$
"Pierre-Yves" <pyu-at-belbone.be> a écrit:
Bonjour,

Je souhaiterais empêcher l'exécution simultanée d'un programme perl.



thomas mersenne wrote:
au démarrage de ton script,
tu vérifies la présence d'un fichier flag dans le répertoire courant,


merci de poster a l'endroit sur Usenet, c'est a dire APRES le texte du
posteur auquel on repond.

-- dominix



Je voudrais éviter le fichier flag parce que si le script plante (par ex:
quitte avec die), le fichier flag n'est pas effacé on ne sait plus lancer le
script!



Avatar
Pierre-Yves
"Jean-Louis MOREL" wrote in message
news:c254eu$e1b$
Dans l'article <4045ffc7$0$313$, pyu-at-belbone.be
a

dit...

Je souhaiterais empêcher l'exécution simultanée d'un programme perl. En
gros lors de l'exécution de mon programme je voudrais qu'il vérifie si il
n'y a pas déjà un process de ce programme qui est entrain de s'exécuter.

Est-ce que quelqu'un peut me dire comment faire ?



Sous Windows, on peut utiliser Win32::Mutex
(en standard avec ActivePerl)
La doc en français :

http://www.bribes.org/perl/docfr/win32mutex.html

(Avec la méthode wait on peut même faire attendre le deuxième script
jusqu'à ce que le premier soit terminé)

#!/usr/bin/perl -w
use strict;
use Win32::Mutex;

die "Tourne deja !n" if Win32::Mutex->open("mon_script");

my $mutex = Win32::Mutex->new(1, "mon_script");

print "Appuyez sur [enter] pour terminer...n";
<STDIN>;

$mutex->release;

__END__

HTH

--
J-L.M.



Merci!
C'est ce que je cherche sauf que le script tourne sous Sun Solaris :-(
J'aurais du précéser...


Avatar
thomas mersenne
"Pierre-Yves" <pyu-at-belbone.be> a écrit dans le message de news:
4046da68$0$323$

"dominix" @despammed.com> wrote in message
news:40462a9c$0$21682$
"Pierre-Yves" <pyu-at-belbone.be> a écrit:
Bonjour,

Je souhaiterais empêcher l'exécution simultanée d'un programme perl.



thomas mersenne wrote:
au démarrage de ton script,
tu vérifies la présence d'un fichier flag dans le répertoire courant,


merci de poster a l'endroit sur Usenet, c'est a dire APRES le texte du
posteur auquel on repond.

-- dominix



Je voudrais éviter le fichier flag parce que si le script plante (par ex:
quitte avec die), le fichier flag n'est pas effacé on ne sait plus lancer
le

script!




sur un die tu peux intercepter l'exception avec un eval
ou alors tu positionnes un signal handler qui nettoie avant de sortir

TM.




Avatar
LB
thomas mersenne wrote:
"Pierre-Yves" <pyu-at-belbone.be> a écrit dans le message de news:
4046da68$0$323$

"dominix" @despammed.com> wrote in message
news:40462a9c$0$21682$

"Pierre-Yves" <pyu-at-belbone.be> a écrit:

Bonjour,

Je souhaiterais empêcher l'exécution simultanée d'un programme perl.



thomas mersenne wrote:

au démarrage de ton script,
tu vérifies la présence d'un fichier flag dans le répertoire courant,


merci de poster a l'endroit sur Usenet, c'est a dire APRES le texte du
posteur auquel on repond.

-- dominix



Je voudrais éviter le fichier flag parce que si le script plante (par ex:
quitte avec die), le fichier flag n'est pas effacé on ne sait plus lancer


le

script!





sur un die tu peux intercepter l'exception avec un eval
ou alors tu positionnes un signal handler qui nettoie avant de sortir

TM.



Plus simple, tu élimines ton fichier dans un bloc END {} qui sera

exécuté même après un die.