stat() 相对于文件系统是原子的
Is stat() atomic with respect to the file system
我有一个可执行文件集合,每隔几分钟 24/7 定期更新一组文件。我正在考虑编写一个监视程序,该程序将持续检查所有这些文件的上次写入时间(使用函数stat()
),以便如果最近没有更新任何文件,它可以发出警报。我担心的是,调用 stat() 的行为可能会导致尝试写入该文件的程序失败。需要我担心吗?...如果是这样,有没有其他方法可以实现我的目标?
是的,stat
调用可以被认为是原子的,因为它返回的所有信息都保证是一致的。 如果在同一时刻调用stat
,则其他进程正在写入文件,则不可能将另一个进程的写入反映在st_mtime
而不是st_size
中。
无论如何,在其他进程写入文件的同一时刻调用stat
肯定不可能导致其他进程失败。(这将是操作系统中一个严重且非常不可接受的错误 - 操作系统的主要工作之一是确保不相关的进程不会以这种方式意外地相互交互。 不过,这种缺乏干扰的特性通常不是我们所说的"原子"。
话虽如此,监视进程的常用方法是通过其进程 ID。 而且可能有很多预先编写的软件包可以帮助您管理一个或多个应该连续运行的进程,为您提供干净的启动/停止和监视功能。 (请参阅 s6 作为示例。 我对这个包一无所知,也不推荐它;这只是我在网络搜索中遇到的第一个。
另一种可能性是,如果你在进程之间设置了任何类型的IPC机制,是设置每个进程发布的周期性心跳,以便某处的看门狗计时器可以检测到进程的死亡。
但是,如果您想通过他们写入的文件的及时性来继续监控您的进程,这听起来也是一种非常好的技术。
相关文章:
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- C++系统找不到指定的文件错误
- 如何在不包含完整的文件系统头的情况下使用文件系统的类路径C++17?
- 返回混合 \ 和 / 的文件系统路径字符串方法
- stat() 相对于文件系统是原子的
- C++中的文件系统
- 如何知道何时将新文件添加到 Windows 中的文件系统
- Flashdrive损坏的文件系统上的文本文件恢复
- 除了 Boost 的文件系统之外,是否有一个好的C++库来操作文件和目录?
- 如何检测单个文件的文件系统大小限制
- 特定文件类型的文件系统筛选器驱动程序
- 为什么路径比较在最新的文件系统草稿 (C++) 中区分大小写
- QT C++ 将文件从数据库存储到我的文件系统
- 允许在应用程序级别上装载的文件系统库
- 是否有适用于Windows的iTunes C++库允许访问USB连接的iOS设备的文件系统?
- Windows上不可靠的文件系统操作
- 在Linux的C/C++中,如何确定已安装或未安装分区的文件系统类型
- 用于c++的文件系统迭代器
- 如何使用Boost.Linux上的文件系统