我从我所看到的关于 bashflock
函数的内容中派生了一个示例 bash 脚本。我愿意:
func()
{
42>/home/foo
flock -e 42 || exit 1
echo "hello world"
sleep 5
}
然后我连续运行func&
,每个都hello world
立即打印,而我希望第一个打印消息,其余的退出。我在这里想念什么?
我从我所看到的关于 bashflock
函数的内容中派生了一个示例 bash 脚本。我愿意:
func()
{
42>/home/foo
flock -e 42 || exit 1
echo "hello world"
sleep 5
}
然后我连续运行func&
,每个都hello world
立即打印,而我希望第一个打印消息,其余的退出。我在这里想念什么?
考虑这个示例,基于
flock
手册页中的示例:现在,如果我运行该脚本一次:
如果我在这个脚本的 10 秒睡眠窗口内运行两个实例,第一个在后台运行,可能的事件序列是:
在此示例中,第二个进程赢得了比赛并首先获得了锁。然后它释放锁并允许第一个(后台)进程获取,然后释放锁。
我可以通过在启动它们之间引入延迟来提高第一个进程赢得比赛的机会: