bash flock:为什么200?

Sub*_*way 31 bash flock

关于那个线程: bash flock:如果无法获取锁定则退出

如果有人能向我解释'200'代表什么,我将不胜感激.

我已经阅读了关于flock的内容,如果要指定文件描述符,似乎有200个,但这个数字有什么好处呢?

Bri*_*ell 44

没有什么特别的数字200.它恰好是flock命令手册页中使用的例子; 它碰巧是一个很大的数字,所以它不太可能与您在脚本中打开的任何其他文件的文件描述符冲突.

在您的评论中,您询问:

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

括号()创建一个子shell; 一个与父进程分开的新进程.在200>/tmp/blah.lockfile这一进程中开拓事业/tmp/blah.lockfile的写作,文件描述符200括号内的命令是外壳内执行.

flock -e 200获取文件描述符200指向的文件的独占锁.独占锁意味着试图获取该文件锁的任何其他人(独占或共享)将阻止(等待)直到该锁已被放弃或失败如果他们达到超时或要求不阻止.因此,在子shell的主体的其余部分(echosleep命令)中,锁将由该子shell保持,并且没有其他人可以获得该锁.子shell完成后,文件将被关闭并放弃锁定.

  • @Rapher这在技术上并不必要; 您可以在执行代码之前获取锁定,然后将其释放.但是,它可以方便地管理锁; 保证在子shell退出时锁定将被丢弃,因此您不会忘记丢失锁定(或由于某些其他原因而无法丢弃锁定),并且很容易看到锁定适用的范围匹配括号. (7认同)
  • 所以如果你在多个脚本中使用这种技术,你使用不同的数字?或不同的锁文件名? (3认同)