Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock()
{
mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1;
do
if test -n $(cat "$mutex") &&
! kill -0 $(cat "$mutex") > /dev/null 2>&1; then
rm -f "$mutex"
elif test $(cat "$mutex") = $$; then
echo "mutex_lock: we (pid $$) already own mutex $mutex"
fi
sleep 0.1
done
}
mutex_unlock()
{
mutex="$1"
if test -e "$mutex" && test $$ = $(cat "$mutex"); then
rm -f "$mutex"
return 0
fi
if ! test -e "$mutex"; then
echo "mutex_unlock: mutex $mutex does not exist"
return -1
fi
echo -n "mutex_unlock: we (pid $$) do not own mutex $mutex "
echo "(owned by `cat "$mutex"`)"
return -1
}
J'ai pourtant l'impression que ce n'est pas atomique. En tout cas,
ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai
pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Cordialement,
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Quia comme auraient dit mes maîtres jésuites... ;-)
C'est un bout de script que je n'ai pas écrit, qui vient d'un serveur Linux (qui commence à m'énerver) et que je tente de faire tourner sous un NetBSD.
netbsd/bash ? pourquoi bash ? ca a l'air plus ou moins shell posix ton truc.
Parce que plus loin, il y a un tas de basheries pas très nettes qui ne passent pas avec le sh de NetBSD.
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
Le Thu, 24 Jan 2013 18:31:47 +0000 (UTC),
Marc Espie <espie@lain.home> écrivait :
In article <slrnkg2pgg.ngc.jkb@rayleigh.systella.fr>,
JKB <jkb@koenigsberg.invalid> wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
Quia comme auraient dit mes maîtres jésuites... ;-)
C'est un bout de script que je n'ai pas écrit, qui vient d'un
serveur Linux (qui commence à m'énerver) et que je tente de faire
tourner sous un NetBSD.
netbsd/bash ? pourquoi bash ? ca a l'air plus ou moins shell posix ton
truc.
Parce que plus loin, il y a un tas de basheries pas très nettes qui
ne passent pas avec le sh de NetBSD.
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Quia comme auraient dit mes maîtres jésuites... ;-)
C'est un bout de script que je n'ai pas écrit, qui vient d'un serveur Linux (qui commence à m'énerver) et que je tente de faire tourner sous un NetBSD.
netbsd/bash ? pourquoi bash ? ca a l'air plus ou moins shell posix ton truc.
Parce que plus loin, il y a un tas de basheries pas très nettes qui ne passent pas avec le sh de NetBSD.
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
Manuel Bouyer
JKB wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock() { mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1; [...] J'ai pourtant l'impression que ce n'est pas atomique. En tout cas, ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher. Mais pourquoi ne pas utiliser shlock(1) ?
-- Manuel Bouyer NetBSD: 26 ans d'experience feront toujours la difference --
JKB <jkb@koenigsberg.invalid> wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock()
{
mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1;
[...]
J'ai pourtant l'impression que ce n'est pas atomique. En tout cas,
ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai
pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher.
Mais pourquoi ne pas utiliser shlock(1) ?
--
Manuel Bouyer <bouyer@nerim.net>
NetBSD: 26 ans d'experience feront toujours la difference
--
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock() { mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1; [...] J'ai pourtant l'impression que ce n'est pas atomique. En tout cas, ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher. Mais pourquoi ne pas utiliser shlock(1) ?
-- Manuel Bouyer NetBSD: 26 ans d'experience feront toujours la difference --
JKB
Le Thu, 24 Jan 2013 18:58:54 +0000 (UTC), Manuel Bouyer écrivait :
JKB wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock() { mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1; [...] J'ai pourtant l'impression que ce n'est pas atomique. En tout cas, ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher. Mais pourquoi ne pas utiliser shlock(1) ?
C'est un NetBSD qui est un domU de Xen, hébergé sur un domO sous Linux.
Quant à la question pourquoi ne pas utiliser shlock, tout simplement parce que je ne connaissais pas. Je vais tenter.
Cordialement,
JKB -- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
Le Thu, 24 Jan 2013 18:58:54 +0000 (UTC),
Manuel Bouyer <bouyer@nerim.net> écrivait :
JKB <jkb@koenigsberg.invalid> wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock()
{
mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1;
[...]
J'ai pourtant l'impression que ce n'est pas atomique. En tout cas,
ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai
pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher.
Mais pourquoi ne pas utiliser shlock(1) ?
Le Thu, 24 Jan 2013 18:58:54 +0000 (UTC), Manuel Bouyer écrivait :
JKB wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock() { mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1; [...] J'ai pourtant l'impression que ce n'est pas atomique. En tout cas, ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher. Mais pourquoi ne pas utiliser shlock(1) ?
C'est un NetBSD qui est un domU de Xen, hébergé sur un domO sous Linux.
Quant à la question pourquoi ne pas utiliser shlock, tout simplement parce que je ne connaissais pas. Je vais tenter.
Cordialement,
JKB -- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
JKB
Le Thu, 24 Jan 2013 18:58:54 +0000 (UTC), Manuel Bouyer écrivait :
JKB wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock() { mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1; [...] J'ai pourtant l'impression que ce n'est pas atomique. En tout cas, ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher. Mais pourquoi ne pas utiliser shlock(1) ?
Trouvé... C'est la lenteur des accès disques de Xen qui ont permit de voir une race condition dans un script qui tournait depuis quelques années sur un serveur réel...
D'un côté, ça me ressure un peu, je ne pensais pas NetBSD moisi ;-)
Bon week-end,
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
Le Thu, 24 Jan 2013 18:58:54 +0000 (UTC),
Manuel Bouyer <bouyer@nerim.net> écrivait :
JKB <jkb@koenigsberg.invalid> wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock()
{
mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1;
[...]
J'ai pourtant l'impression que ce n'est pas atomique. En tout cas,
ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai
pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher.
Mais pourquoi ne pas utiliser shlock(1) ?
Trouvé... C'est la lenteur des accès disques de Xen qui ont permit
de voir une race condition dans un script qui tournait depuis
quelques années sur un serveur réel...
D'un côté, ça me ressure un peu, je ne pensais pas NetBSD moisi ;-)
Bon week-end,
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Le Thu, 24 Jan 2013 18:58:54 +0000 (UTC), Manuel Bouyer écrivait :
JKB wrote:
Bonsoir à tous,
Dans un script shell, j'ai besoin de mutexes. J'ai donc écrit ceci :
mutex_lock() { mutex="$1"
while ! (set -C; echo $$ > "$mutex") > /dev/null 2>&1; [...] J'ai pourtant l'impression que ce n'est pas atomique. En tout cas, ça ne fonctionne pas. Sous Linux, en revanche, ça roule. Je n'ai pourtant rien vu de spécifique à Linux dans le set -C. Une idée ?
Je viens de tester sur un 5.1/i386 et ca a l'air de marcher. Mais pourquoi ne pas utiliser shlock(1) ?
Trouvé... C'est la lenteur des accès disques de Xen qui ont permit de voir une race condition dans un script qui tournait depuis quelques années sur un serveur réel...
D'un côté, ça me ressure un peu, je ne pensais pas NetBSD moisi ;-)
Bon week-end,
JKB
-- Si votre demande me parvient sur carte perforée, je titiouaillerai très volontiers une réponse... => http://grincheux.de-charybde-en-scylla.fr
# localisation de perl found=0 for perl in /usr/bin/perl /opt/perl*/bin/perl /usr/opt/perl*/bin/perl /usr/contrib/bin/perl perl5 perl; do if type "${perl}" > /dev/null 2>&1; then found=1 break fi done
# pas trouve => on sort if (( found == 0 )); then echo "$0: perl not found." >&2 exit 1 fi
if [[ $1 = -d ]]; then shift exec "${perl}" -le 'print (-e "$ARGV[0]" && -e "$ARGV[1]" ? (stat($ARGV[0]))[9] - (stat($ARGV[1]))[9] : -1);' "$@" fi
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
# localisation de perl
found=0
for perl in /usr/bin/perl /opt/perl*/bin/perl /usr/opt/perl*/bin/perl
/usr/contrib/bin/perl perl5 perl; do
if type "${perl}" > /dev/null 2>&1; then
found=1
break
fi
done
# pas trouve => on sort
if (( found == 0 )); then
echo "$0: perl not found." >&2
exit 1
fi
if [[ $1 = -d ]]; then
shift
exec "${perl}" -le 'print (-e "$ARGV[0]" && -e "$ARGV[1]" ?
(stat($ARGV[0]))[9] - (stat($ARGV[1]))[9] : -1);' "$@"
fi
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
# localisation de perl found=0 for perl in /usr/bin/perl /opt/perl*/bin/perl /usr/opt/perl*/bin/perl /usr/contrib/bin/perl perl5 perl; do if type "${perl}" > /dev/null 2>&1; then found=1 break fi done
# pas trouve => on sort if (( found == 0 )); then echo "$0: perl not found." >&2 exit 1 fi
if [[ $1 = -d ]]; then shift exec "${perl}" -le 'print (-e "$ARGV[0]" && -e "$ARGV[1]" ? (stat($ARGV[0]))[9] - (stat($ARGV[1]))[9] : -1);' "$@" fi
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.