【发布时间】:2012-11-13 03:53:12
【问题描述】:
关于那个线程: bash flock: exit if can't acquire lock
如果有人能向我解释一下“200”代表什么,我将不胜感激。
我读过关于flock的文章,如果指定一个文件描述符似乎是200,但是这个数字有什么好处呢?
【问题讨论】:
-
只是一个任意的文件描述符编号。
关于那个线程: bash flock: exit if can't acquire lock
如果有人能向我解释一下“200”代表什么,我将不胜感激。
我读过关于flock的文章,如果指定一个文件描述符似乎是200,但是这个数字有什么好处呢?
【问题讨论】:
数字 200 没有什么特别之处。它恰好是flock 命令手册页中使用的示例;而且它恰好是一个很大的数字,因此它不太可能与您在脚本期间打开的任何其他文件的文件描述符发生冲突。
在您的评论中,您询问:
(
flock -e 200
echo "In critical section"
sleep 5
) 200>/tmp/blah.lockfile
echo "After critical section"
括号() 创建一个子shell;一个新的进程,与父进程分开。 200>/tmp/blah.lockfile 导致该进程打开 /tmp/blah.lockfile 以在文件描述符 200 上写入。括号内的命令在该 shell 中执行。
flock -e 200 在文件描述符 200 指向的文件上获得排他锁。排他锁意味着任何其他试图获得该文件上的锁的人,无论是排他的还是共享的,都会阻塞(等待)直到这个锁已被放弃,或者如果他们遇到超时或被要求不阻止则失败。因此,在子shell 主体的剩余部分(echo 和sleep 命令)中,锁将由该子shell 持有,其他人无法获得该锁。子shell完成后,文件将被关闭并放弃锁定。
【讨论】:
( flock -e 200 echo "In critical section" sleep 5 ) 200>/tmp/blah.lockfile echo "After critical section"
exec 3>/some/file,或具有类似编号重定向的子shell。所以你可以手动跟踪数字,记住 0、1 和 2 是标准输入、标准输出和标准错误。