【问题标题】:How to use flock on Linux [duplicate]如何在Linux上使用flock [重复]
【发布时间】:2019-10-24 00:39:01
【问题描述】:

我正在查看羊群文档:

http://www.tutorialspoint.com/unix_system_calls/flock.htm

https://linux.die.net/man/1/flock

我有这个:

#!/usr/bin/env bash

temp_dir="$HOME/temperton/tmp";
mkdir -p "$temp_dir"

(

  flock -x "$temp_dir/a"
  echo '111'

) &

(

  flock -x "$temp_dir/a"
  echo '222'

) &

但是当我运行它时,我得到了这个错误:

flock: bad file descriptor: '/home/ratt/temperton/tmp/a'
flock: 111
bad file descriptor: '/home/ratt/temperton/tmp/a'
222

【问题讨论】:

  • flock 不是这样工作的。您需要同时提供要锁定的文件和命令。请查看this 手册页,其中包含使用示例。
  • 通过 not 包含要运行的命令,您是在告诉它执行基于文件描述符的锁定,但是您忘记了一些非常重要的事情工作。所以,是的,再次查看手册页中的示例。

标签: bash shell unix mutex flock


【解决方案1】:

'flock' 是最有用的,然后使用文件描述符进行操作。如果锁定文件/目录名,您还应该提供要执行的命令。我想,在内部它的工作原理如下:

    exec 4<$name # open
    flock 4
    <your_command_here>
    exec 4<&-    # close

在您的示例中,您可以将锁替换为

    flock $temp_dir sleep 5s

检查差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多