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