flock - 脚本完成但仍然锁定

时间:2015-10-23 22:34:13

标签: linux bash flock

在我的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

如果有人能解释一下,我会非常感激吗?

谢谢, 拉尔夫

1 个答案:

答案 0 :(得分:3)

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

#!/bin/bash

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