stat() 相对于文件系统是原子的



我有一个可执行文件集合,每隔几分钟 24/7 定期更新一组文件。我正在考虑编写一个监视程序,该程序将持续检查所有这些文件的上次写入时间(使用函数stat()),以便如果最近没有更新任何文件,它可以发出警报。我担心的是,调用 stat() 的行为可能会导致尝试写入该文件的程序失败。需要我担心吗?...如果是这样,有没有其他方法可以实现我的目标?

是的,stat调用可以被认为是原子的,因为它返回的所有信息都保证是一致的。 如果在同一时刻调用stat,则其他进程正在写入文件,则不可能将另一个进程的写入反映在st_mtime而不是st_size中。

无论如何,在其他进程写入文件的同一时刻调用stat肯定不可能导致其他进程失败。(这将是操作系统中一个严重且非常不可接受的错误 - 操作系统的主要工作之一是确保不相关的进程不会以这种方式意外地相互交互。 不过,这种缺乏干扰的特性通常不是我们所说的"原子"。

话虽如此,监视进程的常用方法是通过其进程 ID。 而且可能有很多预先编写的软件包可以帮助您管理一个或多个应该连续运行的进程,为您提供干净的启动/停止和监视功能。 (请参阅 s6 作为示例。 我对这个包一无所知,也不推荐它;这只是我在网络搜索中遇到的第一个。

另一种可能性是,如果你在进程之间设置了任何类型的IPC机制,是设置每个进程发布的周期性心跳,以便某处的看门狗计时器可以检测到进程的死亡。

但是,如果您想通过他们写入的文件的及时性来继续监控您的进程,这听起来也是一种非常好的技术。

相关内容

最新更新