gpt4 book ai didi

bash:flock 可以阻止一起运行脚本吗?

转载 作者:行者123 更新时间:2023-12-04 05:19:40 29 4
gpt4 key购买 nike

对不起,我不能完全集中我的问题。

我正在尝试使用 flock 来避免同时运行脚本,如已接受的答案中所述:
How to prevent a script from running simultaneously?

我记得有人说这样可能会出现根本无法运行脚本之类的问题。

有人知道这种可能性吗?

我尝试了以下场景:

  • 运行后立即运行脚本 - 它第二次运行
    完美
  • 用 CTRL+C 中断脚本,然后运行
    再次 - 第二次运行没问题
  • 在脚本运行时突然关闭机器,打开电源
    机器并重新运行脚本 - 结果相同:没问题

  • 我想不出更复杂的可能性。

    最佳答案

    顾名思义,flock实用程序包装 flock(2)系统调用,其 documentation声明它将锁与打开文件表中的 fd 条目相关联。打开的文件在最后一个文件描述符关闭时被删除,描述符本身是当进程以任何方式退出时自动清除的临时资源,包括 kill -9 .强制关闭机器会删除正在运行的系统的整个状态,因此与打开的文件关联的锁也无法在这种情况下存活。因此,及时退出的脚本不应阻塞系统。

    想到的一种阻塞的现实可能性是脚本有一个错误,导致它无限期挂起,这确实会阻止其他实例能够运行。如果在实践中预计会发生这种情况,可以通过在获取锁后立即将脚本 PID ( $$ ) 写出到锁文件中来处理。在获取锁之前,等待锁的进程将使用 -w 指定超时。选项 flock .如果超时到期,它将从锁文件中读取挂锁所有者的 PID,杀死所有者,并重复锁定过程。

    一个理论上的问题是硬编码的文件描述符编号 200。如果您的脚本打开 200 个文件,或者是从打开 200 个文件而没有关闭执行位的程序生成的,您将破坏现有的文件描述符。这在实践中极不可能发生。

    关于bash:flock 可以阻止一起运行脚本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13787964/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com