flock - 脚本已完成但仍处于锁定状态

flock - script done but still locked

在我的 bash 脚本开始时,我 运行 蜂拥而至以确保脚本不会同时 运行 两次。 脚本的一部分是显示 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

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

谢谢, 拉尔夫

xclock进程继承了锁文件的打开文件描述符,以及文件上的锁。您可以通过使用 &-.

重定向在该过程中关闭它
#!/bin/bash

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