在我的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
如果有人能解释一下,我会非常感激吗?
谢谢, 拉尔夫
答案 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