Bash: Lock function
From FVue
# Put lock
# @return 0 if successful, 1 if not
function prj_lock() {
# Writing to lock file is successful?
if set -o noclobber; echo "$$" > "$PRJ_LOCK_FILE" 2> /dev/null; then
# Yes, writing to lock file is successful;
result=0
else
# No, writing to lock file yields errors;
# Does lock file hold a valid pid?
if test -n "$(cat "$PRJ_LOCK_FILE")" && ps p $(cat "$PRJ_LOCK_FILE") > /dev/null; then
# Yes, lock file holds a valid pid;
echo "$(logdate) Project is locked (busy)"
result=1
else
# No, lock file holds a non-valid pid
# Indicate error
echo "Error: Project is locked by non-existing process (pid = $(cat $PRJ_LOCK_FILE))" >&2
echo "Removing lock..." >&2
prj_unlock
exit 1
fi
fi
return $result
} # prj_lock()
#--- prj_unlock() -------------------------------------------------------------
function prj_unlock() {
# Remove lockfile
rm -f $PRJ_LOCK_FILE
} # prj_unlock()

