OVH Cloud OVH Cloud

semaphore dans un shell-script

14 réponses
Avatar
Alain Ketterlin
Salut à tous,

J'aurais besoin d'utiliser un sémaphore dans shell-script (pour
contrôler le nombre de processus que je peux lancer). Quelqu'un a-t-il
déjà vu quelque chose de ce type (même si ce sont de bêtes coquilles
autour de sem_open et compagnie -- j'avoue que j'ai un eu la flemme de
les écrire moi-même) ?

J'ai bien envisagé d'utiliser une fifo pour ça, mais ça ne me convient
pas parce qu'un lecteur s'arrête quand il n'y a plus d'écrivain. Je
cherche quelque chose qui corresponde exactement au comportement d'un
sémaphore (POSIX suffit, je n'ai pas besoin des raffinements des IPC
SysV).

Merci d'avance.

-- Alain.

P/S: je suis sous Linux 2.6, mais si c'est portable c'est mieux.

4 réponses

1 2
Avatar
Nicolas George
ALain Montfranc wrote in message :
si le fichier source n'existe pas


Gnî ?!?

Je ne comprends rien à ce que tu veux faire, et ça m'a l'air franchement
folklorique. Tu devrais donner un exemple plus complet.

Avatar
ALain Montfranc
Nicolas George a écrit
ALain Montfranc wrote in message :
si le fichier source n'existe pas


Gnî ?!?

Je ne comprends rien à ce que tu veux faire, et ça m'a l'air franchement
folklorique. Tu devrais donner un exemple plus complet.


Quick'n dirty - Mais de ttes facons, comme je le disait, A EVITER


#!/bin/sh

# Lock

while true
do
if [ -f toto ]
then
mv toto tutu
if [ "$?" = 0 ]
then
break
fi
fi
sleep 1
done

echo "Got lock"

sleep 10 # Traitement....

mv tutu toto

echo "Lock realeased"


Avatar
Nicolas George
ALain Montfranc wrote in message :
if [ -f toto ]


Ce test-là est inutile.

mv toto tutu
if [ "$?" = 0 ]


On peut faire directement :

if mv toto tutu; then

Et si mv utilise bien rename, ça devrait marcher. Évidemment, rien ne
garantit que mv utilise rename. Mais rename lui-même fait bien le boulot.

Ceci dit, ça n'a aucun avantage par rapport à un rm/unlink.

Avatar
ozne
Alain Ketterlin a écrit le 10/07/2007 à 16h08 :
Salut à tous,

J'aurais besoin d'utiliser un sémaphore dans shell-script (pour
contrôler le nombre de processus que je peux lancer). Quelqu'un a-t-il
déjà vu quelque chose de ce type (même si ce sont de
bêtes coquilles
autour de sem_open et compagnie -- j'avoue que j'ai un eu la flemme de
les écrire moi-même) ?

J'ai bien envisagé d'utiliser une fifo pour ça, mais ça ne
me convient
pas parce qu'un lecteur s'arrête quand il n'y a plus d'écrivain.
Je
cherche quelque chose qui corresponde exactement au comportement d'un
sémaphore (POSIX suffit, je n'ai pas besoin des raffinements des IPC
SysV).

Merci d'avance.

-- Alain.

P/S: je suis sous Linux 2.6, mais si c'est portable c'est mieux.


Bonjour,
Je ne sais pas si c'est trop tard pour répondre à ton problème,
mais je t'aurais dit de regarder vers la famille des commande ipc (ipcs, ipcrm, …)
ou mieux, d'utiliser la commande lockfile
qui permet d'apporter une solution simple et complète des sémaphores au niveau du shell.
1 2