【发布时间】:2013-08-02 12:35:51
【问题描述】:
当必须通过文件系统同步程序(shell 脚本)时,我发现基于flock 的解决方案是recommended(也应该可以工作on NFS)。在脚本中使用的规范示例(来自 http://linux.die.net/man/1/flock)是:
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
我不太明白为什么整个结构可以确保原子性。特别是,我想知道flock -s 200 和200>/var/lock/mylockfile 的执行顺序是什么时候,例如bash 执行这些代码行。此订单是否有保证/确定性?按照我的理解,如果这个习语应该起作用,它必须是确定性的。但是由于子shell是在子进程中产生的,所以我不明白这两个进程是如何同步自己的。我只看到了这两个命令之间的竞争条件。
如果有人能消除我对此的困惑并解释为什么可以使用此构造来安全地同步进程,我将不胜感激。
同时,如果有人知道,我会对选择任意文件描述符(例如示例中的 200)的安全性感兴趣,尤其是在具有大型 NFS 文件系统的上下文中很多客户。
【问题讨论】:
标签: linux bash synchronization locking nfs