5

众所周知,当尝试在 Linux 上使用 inotify 监视目录时,我们会在文件创建后立即收到通知(在其他进程完成写入之前)

有没有一种有效的方法来确保在其他进程完成写入文件之前不读取文件?

我们可能会添加延迟读取;但众所周知,它是有缺陷的。

为了更清楚地了解场景;这两个进程以不同的用户身份运行;预期的负载大约是每秒创建几百个文件。

4

4 回答 4

1

在其他地方创建它,写入它,关闭它,然后重命名它 - 还是我遗漏了一些明显的东西?

于 2010-07-16T19:54:41.430 回答
1

根据您的问题,听起来您当前正在使用IN_CREATE(也许是IN_OPEN)标志监视目录。为什么不也使用该IN_CLOSE标志以便在文件关闭时收到通知?从那里,应该很容易跟踪文件是否打开,并且您会知道您还不想尝试阅读它。

于 2010-07-16T20:58:06.083 回答
0

您可以检查/proc/<pid>/fd文件是否仍处于打开状态。如果它未在此处列出,则可以确定该进程不再使用它。

于 2010-07-16T18:32:00.630 回答
-1

也许 lsof 命令可以提供帮助。它列出了所有打开的文件。$ 人 lsof

于 2010-07-25T01:16:18.310 回答