在Bash中,我试图创建一个函数getLock用于不同的锁名称。
function getLock
{
getLock_FILE="${1}"
getLock_OP="${2}"
case "${getLock_OP}" in
"LOCK_UN")
flock -u "${getLock_FILE}"
rm -fr "${getLock_FILE}"
;;
"LOCK_EX")
flock -x "${getLock_FILE}"
esac
}
但是flock报错:flock: bad number: myfilelock
我该如何在不需要执行flock命令的情况下锁定文件,并在需要时释放它?
用法如下:
getLock myfilelock LOCK_EX
somecommands
........
getLock myfilelock LOCK_UN
flock
来保护每个需要锁定保护的实例。否则,只需创建自己的锁文件,这只是普通的文件... - Jiteflock
的工作方式如下:进程1执行flock lockfile command_to_run
,进程2执行flock lockfile some_command
。现在第二个进程将被阻塞,直到第一个进程完成。就这么简单。甚至不需要关心锁文件本身,flock
会自动处理。 - Jitefunction
关键字与POSIX sh不兼容,并且与使用POSIX语法声明函数相比没有任何价值。此外,为什么要使用命名空间全局变量,而不是只使用本地变量呢?另外,永远不要删除使用flock创建的锁文件(除非您完全确定没有人在同时尝试获取锁 - 因此在重新启动时是安全的);这会创建竞争条件。将未锁定的文件保留在磁盘上,以确保如果两个程序尝试同时获取相同的已释放锁,则它们获得相同的inode。 - Charles Duffy