【发布时间】: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。
-
正确;
&未定义或记录以使流程完全独立。