关闭文件描述符并删除 inotify watch 真的有必要吗?

Posted

技术标签:

【中文标题】关闭文件描述符并删除 inotify watch 真的有必要吗?【英文标题】:Is closing file descriptor and removing inotify watch really necessary? 【发布时间】:2010-03-08 09:22:12 【问题描述】:

使用 python inotifyx,如果我需要它们直到程序退出,我是否必须删除监视并关闭打开的系统文件描述符?例如。如果我在每次运行时创建一个(文件描述符 + 监视)并且不关闭它,是否会出现一些问题?

【问题讨论】:

【参考方案1】:

在使用完资源后释放资源(例如,空闲内存、关闭文件描述符、子进程上的 waitpid(2) 等)总是一个好主意。懒惰并在您退出时让操作系统为您处理,这肯定会导致将来出现错误。

【讨论】:

据我了解,这些“未来的错误”将意味着 Linux 内核或 Python 中的非常严重的错误。还是我错过了什么? 嗯,他们可能是,但这不太可能。更有可能的是,您将以某种方式修改您的代码,从而导致资源泄漏。例如,将一段代码重构为一个函数并多次调用它——如果该新函数泄漏了文件描述符,那就是个问题。【参考方案2】:

内核将监视存储为完整路径,因此最好关闭监视,它还可以消除 VFS 的不必要工作。至于文件描述符,这将取决于您打开了多少其他文件。

有点像打电话,很高兴告诉对方您已停止收听,挂断电话是可选的,但很常规。如果您需要它来做某事,请保留它。

【讨论】:

但是linux不应该在进程退出时自动这样做吗?或者通过不删除 inotify 手表有明显的机会在操作系统中留下一些额外的痕迹? @hell.orts.ru:是的,Linux 会在进程终止时执行此操作,从您的问题措辞来看,听起来您不再需要手表了但想保留文件描述符。在这种情况下,是的,取下手表并保留 FD。

以上是关于关闭文件描述符并删除 inotify watch 真的有必要吗?的主要内容,如果未能解决你的问题,请参考以下文章

当文件被删除并再次创建时,inotify 停止监视文件

如何使用inotify

如何使用inotify

inotify_add_watch 失败,没有这样的文件或目录

inotify,inotify_add_watch() 监控多个目录,c++

inotify_add_watch 相对于 O_PATH dirfd