我想使用mmap在Linux下运行的C程序中实现程序状态的某些部分的持久性,方法是使用设置了MAP_SHARED标志的mmap()将固定大小的结构与众所周知的文件名相关联.出于性能原因,我宁愿根本不调用msync(),也不会有其他程序访问此文件.当我的程序终止并重新启动时,它将再次映射同一个文件并对其进行一些处理以恢复它在终止之前所处的状态.我的问题是:如果我从不在文件描述符上调用msync(),内核是否会保证对内存的所有更新都会写入磁盘并随后可以恢复,即使我的进程是以SIGKILL终止的?此外,即使我的程序从不调用msync(),内核是否会定期将页面写入磁盘?
编辑:我已经解决了数据是否写入的问题,但我仍然不确定这是否会导致一些意外的系统加载,而不是试图用open()/ write()/ fsync()来处理这个问题承担KILL/SEGV/ABRT /等过程中某些数据可能丢失的风险.添加了一个'linux-kernel'标签,希望有些知识渊博的人可以加入.
如果使用SIGKILL终止进程,它对内存映射文件所做的更改是否会刷新到磁盘?我假设如果操作系统确保在通过SIGKILL终止进程时将内存映射文件刷新到磁盘,那么它也将使用其他终止信号(SIGABRT,SIGSEGV等等)执行此操作.