防止锁传播

2024-01-01

在 bash 下进行锁定的一种简单且看似可靠的方法是:

exec 9>>lockfile
flock 9

然而,众所周知,bash 会将这样的 fd 锁传播到所有分叉的东西,包括执行的程序等。

有什么办法告诉 bash 不要重复 fd 吗?很好的是,锁附加到一个 fd 上,当程序终止时,无论程序如何终止,该锁都会被删除。

我知道我可以做这样的事情:

run_some_prog 9>&-

但这是相当乏味的。

还有更好的解决办法吗?


您可以使用-o命令行选项flock(1)(长选项--close,这可能更适合在脚本中编写以实现自记录性质),以指定在执行命令之前应关闭文件描述符flock(1):

   -o, --close
          Close the file descriptor on which the lock is held
          before executing command.  This is useful if command
          spawns a child process which should not be holding
          the lock.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止锁传播 的相关文章

  • 从 shell 查找不包含特定注释的 XML 文件

    我想搜索 awk grep sed 几个 XML 文件 pom xml 文件 跳过某些文件夹 而且 第一个条件是它们必须包含标签
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • awk 脚本中出现“BEGIN 块必须有操作部分”错误

    这是我的代码 bin sh filename usr bin find name INSTANCE log echo filename is filename awk BEGIN print Processing file filename
  • 检查 bash 中是否存在关联数组元素

    在 bash 脚本中 我在变量中有一个区域设置 如下所示 locale fr ma 我也有一个像这样的关联数组 declare A new loc map new loc fr ma en ma new loc el gr en gr ne
  • Bash 中所有匹配的^单词^替换^?

    为了澄清 我正在寻找一种方法来执行global搜索并替换先前使用的命令 word replacement 似乎只替换了第一场比赛 有没有一些set我无法选择的选项 尝试这个 echo oneone oneone gs one two Rep
  • 通过 bash 命令设置 gitlab-ci.yml 变量

    variables CUSTOM NODE VERSION cat nvmrc 我想要变量CUSTOM NODE VERSION通过内容填充 nvmrc文件 位于项目根目录中 如何在gitlab ci yml file 上面的例子不起作用
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 使用 SIGINT 默认处理程序时从 system() 返回值

    我遇到了一些奇怪的返回值system 当子进程从终端接收到 SIGINT 时 解释一下 从 Perl 脚本parent pl I used system 运行另一个 Perl 脚本作为子进程 但我还需要通过 shell 运行子进程 所以我使
  • UNIX 统计时间格式

    是否可以格式化 stat 的时间输出 我在用 stat c n A z filename 在 bash 脚本中 但它的时间格式不是我想要的 是否可以在命令中更改此格式 或者我必须稍后手动执行此操作 示例输出如下 lib drwxr xr x
  • 静默检查 bash 脚本中是否存在 rpm

    我正在尝试使用 if 语句快速检查 rpm 是否安装在 bash 脚本中 但我想默默地做 目前 当我运行脚本并且 rpm 确实存在时 它将 rpm 的输出输出到我不想要的屏幕 if rpm qa grep glib then do some
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 在 bash 脚本中使用源时出现“源:未找到”错误

    我正在尝试编写 我认为的 一个简单的 bash 脚本 它将 运行 virtualenv 以 1 美元创建一个新环境 激活虚拟环境 做更多的事情 安装 django 将 django admin py 添加到 virtualenv 的路径等
  • Python DNS服务器IP地址查询

    我正在尝试使用 python 获取 DNS 服务器 IP 地址 要在 Windows 命令提示符下执行此操作 我将使用 ipconfig 全部 如下所示 我想使用 python 脚本做同样的事情 有什么方法可以提取这些值吗 我成功提取了设备
  • 使用脚本从网站中提取电子邮件地址

    给定一个网站 我想知道以编程方式和 或使用脚本的最佳程序是什么 以纯文本形式提取每个页面上存在的所有电子邮件地址 电子邮件受保护 cdn cgi l email protection从该链接和下面的所有站点 递归或直到某个固定深度 使用 s
  • “/bin/bash -l”无效选项

    好吧 我正在尝试在我们的超级计算机上运行隐藏为一项作业的串行 MPI 作业 主要提交脚本基本上如下所示 bin bash l PBS l nodes 4 ppn 8 walltime 24 00 00 cat PBS NODEFILE un
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 终端关闭时 bash 收到的信号

    使用 trap 来捕获信号 如下所示 i 1 while i lt 33 do trap echo i gt gt log txt i done 并强行关闭终端 那么log txt中的内容就是 redhat linux下 1 18 1 17
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检

随机推荐

  • Flurry 4.2.2 SDK 未在 iOS 中发送事件会话数据

    我知道 Flurry 的报告有延迟 但是 我们在第二天没有看到 Flurry 报告的任何结果 Flurry setDebugLogEnabled YES Flurry setLogLevel FlurryLogLevelDebug Flur
  • 在 TeamCity 中从外部文件设置构建参数

    我当前正在使用 TeamCity AssemblyInfo Patcher 在所有 C 程序集上设置程序集版本 我选择的版本方案是 Major Minor build number 0 当我在 TeamCity 中定义主要编号和次要编号时
  • 为什么 xamarin 突然不允许我部署到 iOS 设备

    今天 在我收到 xcode 同意新条款和条件的消息后 这种情况才开始发生 我无法在设备上 任何计算机上放置任何内容 不适用于我的 macbook 不适用于我的 mac mini 不适用于直到昨天还正常工作的现有项目 甚至不适用于全新的项目
  • 无限循环 React hooks

    我不明白为什么我会陷入无限循环useClick我看到我改变了里面的状态值使用效果 using setVal但 useEffect 应该只对第二个参数中指定的 onClick 起作用 我认为这是因为我传递的参数 onClick 已被记忆 但回
  • 自定义视图/操作/控制器在 Sails JS 中不起作用

    我一定做错了什么 但我看不到 基本上如果我通过创建一个控制器 模型sails generate controller products并在文件中 controllers ProductsController我向索引操作添加一些变量 例如 i
  • Laravel Facebook 登录 - 无回调(本地主机)

    我的第一个问题 是否可以在本地主机上进行测试 因为我可以想象这可能是我的问题 我阅读了文档并按照描述执行了所有操作 我浏览到 auth facebook 然后被重定向到 Facebook 在那里我 接受 这些条款 我被重定向到此链接 htt
  • Spring分页-请求参数

    我的 REST 控制器 GetMapping test public Page
  • nrwl/nx 工作区特定原理图

    我一直在研究 nrwl 扩展 它们看起来很棒 但是 当我按照他们的教程进行操作时工作区特定原理图 https nrwl io nx workspace specific schematics 最后一步没有显示要运行的命令 你能告诉我如何运行
  • Android - 如何检测屏幕上的触摸是“滚动”触摸?

    我正在用 Java 创建一个 Android 应用程序 其中有很多
  • 使用 Django/Twilio 进行条件短信响应

    我正在尝试根据不同的参数 来电显示 文本正文 调整短信响应 错误是 HTTP 检索失败 我尝试对不同的调用者使用 Flask 教程 def hello monkey Respond and greet the caller by name
  • 如何在浏览器上永久保存某些值?

    我有一些登录信息 假设用户名 登录电子邮件和位置 即使用户注销并关闭窗口后 我也希望将此信息保留在浏览器中 当用户注销或会话过期后返回时 Web 应用程序会填写客户端用户名并要求用户提供密码 我的要求最好的例子是谷歌登录 目前 我只使用会话
  • SharePoint 2010 中的沙盒解决方案和场解决方案有什么区别

    我是 SharePoint 2010 的新手 沙箱和场解决方案之间的主要区别是什么 你能给我 5 个要记住的差异吗 我用谷歌搜索了 但有很多事情需要理解 作为一个刚起步的人 我想知道基本的区别 感谢您的帮助 农场解决方案 服务器场解决方案托
  • Unity - Firebase 实时数据库 - 获取我在排行榜中的排名

    我有一个使用 firebase 数据库实时进行排行榜的迷你游戏 从 firebase 获取用户分数列表后 我想获取不在列表中的当前用户的分数 获取当前用户的分数很容易 但是如何知道列表中的排名 即 OrderByChild score 这是
  • 从套接字 fd 获取 IP 地址、端口和连接类型

    我有一个跟踪网络应用程序的跟踪程序 给定一个属于被跟踪者的套接字文件描述符 跟踪器是否有可能找到它对应的IP 对于服务器来说是它绑定到的接口的IP 对于客户端来说是被绑定接口的地址 用于建立连接的接口 端口号和连接类型 是否有 libc A
  • 如何从 Linux 获取窗口大小

    每个人 我对编程还是新手 我确实需要一些帮助来解决我面临的问题 所以 这里的情况是我试图在终端尺寸低于 80x24 时显示警告 根据记录 我的操作系统是 Window 但我使用虚拟机来运行 Linux 因为所有文件都在 Linux 中 当我
  • Kibana 不搜索嵌套字段

    使用 Elasticsearch Kibana 并尝试在嵌套对象中的字段中进行搜索 然而它似乎不起作用 这是我在模板中使用的映射 order 0 template ss7 signaling settings index mapping t
  • IE 10 相对位置元素在父元素中滚动后消失

    元素与位置 相对在特定情况下 位于大表格中的表格单元格内的 会在 Windows 7 上的 Internet Explorer 10 中消失 向下滚动页面 滚动div scroller向右 滚动到顶部 所有浏览器均按预期工作 IE10 显示
  • 如何在 Android 中捕获图像并将其显示在图库中?

    之前我捕捉到的图像出现在画廊中 但现在它们没有出现 我不明白为什么 这是我的代码 ContentValues values new ContentValues values put android provider MediaStore I
  • 在 JavaScript 中,如何在不修改原始对象的情况下修改嵌套对象的值?

    如何在不使用额外空间的情况下将所有嵌套对象值更改为 true 任何人都可以帮助我吗 我已经尝试过这种方式 但我没有得到处理嵌套对象的逻辑 P S 请不要关注字符串中的 true 或 false 因为它是模拟数据 我只想实现我未能做到的逻辑
  • 防止锁传播

    在 bash 下进行锁定的一种简单且看似可靠的方法是 exec 9 gt gt lockfile flock 9 然而 众所周知 bash 会将这样的 fd 锁传播到所有分叉的东西 包括执行的程序等 有什么办法告诉 bash 不要重复 fd