【问题标题】:How to acquire a lock file in Linux Bash [duplicate]如何在 Linux Bash 中获取锁定文件 [重复]
【发布时间】:2023-12-31 00:57:02
【问题描述】:

我有一个现有的锁定文件,有时会被其他进程使用。我想暂时获取这个锁定文件,以便其他可能使用它的程序必须等待我解锁。然后我想运行几个命令,然后解锁它。我该怎么做呢?我认为这很容易,但由于某种原因,我根本无法弄清楚。我知道我很可能需要为此使用flock,但是在这种情况下我应该使用什么参数? flock 似乎总是需要一个命令或第二个文件才能工作,但在这种情况下似乎没有。

上下文:我正在使用的 bash 脚本在特定锁定文件(具体来说是/var/lib/apt/lists/lock)周围遇到竞争条件,为了测试我的解决方案,我希望能够可靠地锁定该文件,以便检查是否我对脚本的更改有效。

【问题讨论】:

  • This 是对该主题的概述。特别注意标记为 ProblemsLock files 的部分

标签: linux bash locking locks


【解决方案1】:

flock (1) 手册页中有一个示例。您应该在子 shell 中执行命令:

(
    flock -n 9 || exit 1
    ...
) 9>/var/lib/apt/lists/lock

使用这种形式,当子shell退出时,锁被释放。

【讨论】:

  • 命令不起作用。 /var/lib/apt/lists/lock: Permission denied
  • 你需要对文件有写权限,对于/var/lib/apt/lists/lock意味着你必须是root