linux shell中没有比赛条件的羊群



来源https://plus.google.com/+RandalLSchwartz/posts/QcrqvT3mUdy

#!/bin/sh                                                                       
(
if ! flock -n -x 200
then
echo "$$ cannot get flock"
exit 0
fi
echo "$$ start"
sleep 10                    # real work would be here                      
echo "$$ end"
) 200< $0

我很难理解这一点。因此,弗洛克声称可以在这里独家访问fd 200,但是什么是()200<0重定向?这是什么意思?

flock的这种用法使用可执行文件本身($0)的脚本文件作为其自己的锁定文件。由于除了文件内容之外,文件锁定还基于机制,因此这是可能的。使用<而不是>>>假设它已经存在并且不需要首先创建;由于脚本通常存在,并且在执行过程中可读(其他任何事情都是病态的),所以这是一个安全的假设。

使用200<打开$0进行读取并将其重定向到文件描述符200。在子shell(由大型( ... )组成)中,flock命令然后使用此打开文件描述符进行文件锁定。

相关内容

  • 没有找到相关文章

最新更新