我们都知道 Linux/Unix 会自动阻止对当前打开的另一个进程写入的文件的尝试。但是,如果另一个进程打开文件进行写入,是否可以阻止/锁定对文件的读取访问?我有两个不同的脚本,两者都在随机时间启动并在一天中运行不同时间:一个脚本覆盖特定文件;另一个脚本覆盖特定文件。另一个从该文件中读取。如果第一个打开了文件,我希望第二个阻塞(等待)或失败。
的flock(1)实用程序可以做你想做的事
当您想要覆盖文件时,取出文件上的写锁
flock -x /path/to/lockfile 某个命令文件
让另一个命令检查锁。
flock -n /path/to/lockfile 另一个命令文件
如果文件被锁定,那么您会得到退出代码 1,否则它就是您的,您可以用它做您想做的事情
文档:
-x, -e, --exclusive 获取独占锁,有时称为写锁。这是默认设置。
-n, --nb, --nonblock 如果无法立即获取锁,则失败(退出代码为 1)而不是等待。