在linux shell中没有竞争条件的flock

时间:2014-02-24 14:59:10

标签: bash locking file-descriptor

来自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

我有理解这个问题。所以flock声称在这里可以访问fd 200, 但是什么是()200&lt; $ 0重定向?这是什么意思?

1 个答案:

答案 0 :(得分:2)

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

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