Téléchargement du code source : P.sh
#! /bin/bash
if [ -z "$1" ]; then
echo "Usage $0 mutex-name" >&1
exit 1
else
# the POSIX 'link' system call is supposed to be atomic on a local file system
# an nfs server is also supposed to execute it atomically (at least since the v2)
while ! ln "$0" "$1" 2>/dev/null; do
sleep 1
done
# On some filesystems (eg NTFS), ln may create a copy of the file instead of a hard link.
# Thus, if another process calls P.sh, ln will overwrite the file instead of failing
# We need to check if the created file is a hard link
inode_src=$(ls -i $0 |cut -f 1 -d" ")
inode_dest=$(ls -i $1 |cut -f 1 -d" ")
if [ "$inode_src" != "$inode_dest" ]; then
echo "Attention ! P.sh ne fonctionne pas sur votre système de fichier" >&2
exit 1
fi
exit 0
fi