【问题标题】:flock - script done but still locked群 - 脚本完成但仍被锁定
【发布时间】:2015-10-23 22:34:12
【问题描述】:

在我的 bash 脚本开始时,我运行了 flock 以确保该脚本不会同时运行两次。 脚本的一部分是显示 xclock,但作为后台命令。所以我看到了时钟并且脚本完成了(时钟仍然明显显示)。但是当我想重新启动脚本时,它不允许我这样做,因为它仍然被锁定。似乎只有在关闭 xclock 时才会解除锁定。

我不明白为什么当我将 x-app 作为后台进程启动并且脚本完成时锁定仍然存在。 x-app 进程是执行脚本的进程的子进程吗? 这里是脚本

#!/bin/bash

fd=200
eval "exec $fd>/tmp/test.lock"
if flock -n $fd; then
  xclock &
else
  echo "locked"
fi

如果有人能解释一下,我将不胜感激?

谢谢, 拉尔夫

【问题讨论】:

  • 顺便说一句,你的目标是什么版本的 bash?如果它足够新,您可以使用一些最近的语法扩展来不再需要eval
  • "x-app 进程是执行脚本的进程的子进程吗?" - 当然是。作为父母,它还有什么?
  • 嘿查尔斯,假设 & 使它独立于其父进程。但它只是把它拉到背景上。我正在使用 bash 4.3.11。
  • 正确; & 未定义或记录以使流程完全独立。

标签: linux bash flock


【解决方案1】:

xclock 进程继承了锁定文件的打开文件描述符,以及文件上的锁定。您可以在该过程中通过使用&- 重定向来关闭它。

#!/bin/bash

fd=200
eval "exec $fd>/tmp/test.lock"
if flock -n $fd; then
  eval "xclock $fd>&- &"
else
  echo "locked"
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多