Eu usei a seguinte função no meu script para fazer isso:
getPIDLock () {
if [ ! -e "$LockFile" ]; then
return 0 # Not an error, but lsof will emit a lot of text if the file doesn't exist
fi
local PIDLock=$( lsof -F p "$1" | head -n 1 )
local strEcho='echo ${PID:1}'
bash -c "PID=\"$PIDLock\";$strEcho;" # Assuming system has BASH, but not assuming that the default shell is BASH
return 0
}
Isso emitirá um PID se o arquivo em questão tiver um bloqueio nele; caso contrário, ele emitirá uma string em branco.
PID=$( getPIDLock "/path/to/pidfile" )
if [ -n $PID ]; then
# Do your thing
fi