关于这个线程:bash flock: exit if can't acquire lock
如果有人能解释一下'200'代表什么,我会很感激。
我已经阅读了flock的相关内容,似乎200是指定一个文件描述符,但是这个数字有什么好处呢?
关于这个线程:bash flock: exit if can't acquire lock
如果有人能解释一下'200'代表什么,我会很感激。
我已经阅读了flock的相关内容,似乎200是指定一个文件描述符,但是这个数字有什么好处呢?
数字200本身并没有什么特别之处,它只是在flock
命令的man页面中用作示例;而且它是一个比较大的数字,因此在脚本运行期间打开的任何其他文件的文件描述符中,不太可能与之冲突。
在您的评论中,您提到了:
(
flock -e 200
echo "In critical section"
sleep 5
) 200>/tmp/blah.lockfile
echo "After critical section"
括号()
会创建一个子shell,这是一个独立于父进程的新进程。而200>/tmp/blah.lockfile
则导致该进程打开文件描述符为200的/tmp/blah.lockfile
以供写入。括号中的命令将在该shell内执行。
flock -e 200
会对文件描述符为200的文件获取排它锁。排它锁意味着任何试图对该文件进行加锁(无论是共享锁还是排它锁)的操作将被阻塞(等待),直到此锁被释放或超时或要求不阻塞为止。因此,在子shell的其余部分(即echo
和sleep
命令中),该锁将由该子shell持有,其他人将不能获取该锁。一旦子shell完成,文件将被关闭并释放锁定。
exec 3>/some/file
或具有类似编号的重定向的子shell,否则您不会打开新的文件描述符。因此,您可以手动跟踪数字,记住0、1和2是stdin、stdout和stderr。 - Brian Campbell