检查文件是否在另一个进程中打开

有没有办法打开一个非共享独占读写访问的文件?

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

fs.open允许已打开并正在stream式传输的文件在写入模式下无错误地打开。 可以引入超时延迟,但这太脆弱和任意。

在Windows上,可以使用C语言中的FILE_SHARE_NONE执行CreateFile ,不能完全记得Linux上的等价物(因为如果我没有记错的话,锁是build议的),不知道OS X是否有等价物,posix或除此以外)。

       

网上收集的解决方案 "检查文件是否在另一个进程中打开"

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

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

它可以在Windows,MacOS和Linux上运行,并且只需要Linux上的权限。

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

在macOS和Linux上它包装lsof

相比于使用诸如flock的替代品,据我所知, flock只是咨询,所以只有在所有进程合作检查locking的情况下才能工作,如果进程是独立的,大多数情况并非如此。

请参阅fs-ext软件包中的flock函数。