linux - 群 - 脚本已完成但仍被锁定

标签 linux bash flock

在 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

关于linux - 群 - 脚本已完成但仍被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312372/

相关文章:

linux - 以文字模式从另一个脚本编写 bash 脚本

c - 在 netfilter Hook 中查找可执行发送数据包的名称

regex - 用 sed 替换正则表达式组

php - Cron 作业突然不运行 php 脚本?

linux - 一个打开的套接字可以长时间不读取吗?

linux - git 如何处理几个补丁中的一个?

python - 如何在 python 中使用命令打开 shell?

c - C linux 命名信号量和flock哪个更好

linux - TCL、Linux 和 FLOCK

c - 在 c unix 中使用 flock(),尝试在另一个进程中打开文件时收到哪种错误?