Je possède ce fragment de code dans une fonction bash:
while ! mkdir lock ; do
inotifywait -t $WAIT_TIMEOUT -e delete_self lock
done
local es=$?
if (($es != 0)); then
echo "Checkpoint A"
exit $es
fi
Je pensais que ce point de contrôle A serait complètement inaccessible (depuis une mkdir réussie doit sûrement être la dernière commande exécutée lorsque la boucle while se termine). Cependant, je constate que parfois, le point de contrôle A est atteint. Comment est-ce possible, même en principe?
(pour une raison particulière, vous utilisez le verrouillage par répertoire plutôt que flock?) Ce dernier est non seulement moins de code, mais - plus important encore - se déverrouille automatiquement lorsque le processus contenant le verrou FD se termine , même par perte de puissance ou autre condition impropre/inattendue). –
(deuxième côté: vous pouvez envisager de citer vos expansions sans condition, même si vous savez qu'il n'y a pas d'espaces présents dans les valeurs. '-t" $ WAIT_TIMEOUT "' autorisera un message d'erreur plus utile si la valeur est inopinément '- t $ WAIT_TIMEOUT' étant donné que le premier vérifie qu'une chaîne vide est passée dans le slot, le comportement avec un IFS non-par défaut peut être encore plus surprenant, ce qui pourrait amener une valeur de '101' à se développer en deux mots séparés si' IFS = 0'). –
@CharlesDuffy Merci pour le conseil. Je suis un débutant complet pour Linux et j'ai une aversion pour l'utilisation d'outils que je suspecte "avoir des problèmes". Le ton de [ceci] (http://0pointer.de/blog/projects/locking.html) m'a découragé, pour le meilleur ou pour le pire. – Museful