【问题标题】:can there be a situation in which the flock command ends up in deadlock?会不会出现flock 命令最终陷入僵局的情况?
【发布时间】:2020-07-12 10:38:20
【问题描述】:
set -e

pidfile=/data/demo3

# lock it
exec 200<>$pidfile
flock -n 200 || exit 1

# my code 
echo "hello"
sleep 20
echo "bi"

我有一个文本文件,多个进程可以同时访问这个文本文件。所以我使用flock 命令来确保并发问题。所以一个进程在时间锁定一个文件 = T1 并且其他进程想要同时锁定同一个文件 = T1 那么这不会导致哪个进程首先锁定文件或者这种情况最终会陷入死锁的问题吗? 还是我错过了什么?

如果我正在使用这段代码并且我正在锁定这个 demo3 文件,同时另一个进程想要锁定这个文件,那么这不会导致问题吗?

【问题讨论】:

  • 欢迎来到 SO。您能否包含一些现有代码来说明您的担忧?
  • 我已经添加了。您现在可以检查它,这将是一个很大的帮助。我正在尝试在这里做一个项目,我的截止日期快到了。
  • 这个进程和其他进程对/data/demo3 文件做了什么?它们也是 bash 脚本,还是其他程序?其他脚本/程序是否一直使用flock
  • 它们是 bash 脚本,它们在其中聚集以锁定这个 demo3.json 文件。假设同一脚本同时由 2 个终端运行,这可能是个问题吗?

标签: bash shell locking deadlock flock


【解决方案1】:

不应该没有死锁或争用。

一旦运行此脚本的进程通过flock,只有该进程的# my code 部分将运行,直到进程终止。脚本的其他实例(进程)将失败,exit 1flock

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2017-08-12
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多