如果进程崩溃,映射文件会发生什么

What happens to mmaped file if process crashes?

本文关键字:什么 文件 映射 进程 崩溃 如果      更新时间:2023-10-16

这个问题在OSX, Windows和Linux之间可能有不同的答案。

如果进程崩溃,假设它没有崩溃,那么mmap中的脏页是否会被丢弃或最终由操作系统写出来?

很明显,如果另一个进程映射了它们,那么它们会持续存在,但是如果崩溃的进程是唯一一个进程呢?我对文档中的技术承诺和实际实现都很感兴趣。

如果您只知道一个操作系统,请只响应那个操作系统。

对于Windows,我认为毫无疑问脏页最终会被写入磁盘。有明确的文档说明,取消映射文件视图不会刷新数据,但数据将像任何缓存一样惰性地写入磁盘。FlushViewOfFile强制立即写入,但调用它是可选的。

有一些例外可能是相关的,也可能是不相关的。即使一个程序异常终止,文件的两个映射视图也保证保持一致性,但这种一致性不会扩展到远程文件或使用ReadFile/WriteFile并发访问的文件。

文档没有提供明确的答案,但也没有给出任何暗示,说明相反的情况可能是正确的。


正如链接中指出的那样,如果存在机器故障的风险,那么确保页面在写入时被刷新可能是一个好主意。内核刷新缓存可能会延迟一段时间