【问题标题】:Check if a file is open in another process检查文件是否在另一个进程中打开
【发布时间】:2015-07-01 22:26:54
【问题描述】:

有什么方法可以打开非共享独占读写权限的文件吗?

来自fs.watch 的文件更改事件并不一定意味着文件已被完全写入,在大多数基于节点的进程的情况下,更多的块正在顺流而下,或者它可能还没有被刷新。

fs.open 允许在写入模式下打开已经打开并正在流式传输的文件而不会出现错误。可以引入超时延迟,但这太脆弱和随意了。

在 Windows 上,可以使用 C 语言中的 FILE_SHARE_NONE 执行 CreateFile,不太记得 Linux 上的等价物是什么(如果我没记错的话,锁是建议性的),不知道操作系统是否X 有一个等价物,posix 或其他)。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    您可以使用@ronomon/opened 检查文件是否在另一个进程中打开,是否有任何应用程序打开了该文件的句柄或文件描述符。

    它不会告诉您哪些应用程序打开了文件,只会告诉您该文件在其他应用程序中打开。

    它适用于 Windows、macOS 和 Linux,并且仅在 Linux 上需要权限。

    它使用 Windows 上的本机绑定以独占共享模式打开文件,以检测由于具有打开句柄的其他进程而导致的任何共享冲突。

    在 macOS 和 Linux 上,它包装 lsof

    与使用flock等替代方案相比,据我了解,flock只是建议性的,因此只有在所有进程合作检查锁的情况下才会起作用,而大多数情况下并非如此如果进程是独立的。

    【讨论】:

      【解决方案2】:

      参见fs-ext 包中的flock 函数。

      【讨论】:

      猜你喜欢
      • 2010-09-29
      • 2023-03-31
      • 2012-03-09
      • 2010-12-29
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多