36

关于那个线程: bash羊群:如果无法获得锁则退出

如果有人可以向我解释“200”代表什么,我将不胜感激。

我读过关于flock 的文章,如果指定一个文件描述符似乎是200,但是这个数字有什么好处呢?

4

1 回答 1

59

数字 200 没有什么特别之处。它恰好是flock命令手册页中使用的示例;它恰好是一个很大的数字,因此它不太可能与您在脚本期间打开的任何其他文件的文件描述符发生冲突。

在您的评论中,您询问:

( 
  flock -e 200
  echo "In critical section"
  sleep 5 
) 200>/tmp/blah.lockfile 
echo "After critical section"

括号()创建一个子shell;一个新的进程,与父进程分开。导致该进程在文件描述符 200 上200>/tmp/blah.lockfile打开以供写入。括号内的命令在该 shell 中执行。/tmp/blah.lockfile

flock -e 200在文件描述符 200 指向的文件上获得一个排他锁。排他锁意味着任何其他试图获得该文件上的锁的人,无论是排他的还是共享的,都会阻塞(等待)直到这个锁被放弃,或者失败如果他们超时或要求不阻止。因此,在子shell 主体的剩余部分(echosleep命令)中,锁将由该子shell 持有,其他人无法获得该锁。一旦 subshel​​l 完成,文件将被关闭并放弃锁定。

于 2012-11-25T14:23:47.773 回答