Я хочу использовать mmap для реализации сохранения некоторых частей состояния программы в программе на C, запущенной под Linux, путем связывания структуры фиксированного размера с известным именем файла с помощью mmap() с установленным флагом MAP_SHARED. По соображениям производительности я бы предпочел не вызывать msync() вообще, и никакие другие программы не будут обращаться к этому файлу. Когда моя программа завершается и перезапускается, она снова отображает тот же файл и выполняет некоторую обработку на нем, чтобы восстановить состояние, в котором оно было до завершения. Мой вопрос заключается в следующем: если я никогда не вызову msync() в файловом дескрипторе, ядро гарантирует, что все обновления в памяти будут записаны на диск и впоследствии будут восстановлены, даже если мой процесс будет завершен с помощью SIGKILL? Кроме того, будет ли общая накладная система из ядра периодически записывать страницы на диск, даже если моя программа никогда не вызывает msync()?
РЕДАКТИРОВАТЬ: Я решил проблему записи данных, но я все еще не уверен, приведет ли это к непредвиденной загрузке системы из-за попытки решить эту проблему с помощью open ( )/write()/fsync() и риск того, что некоторые данные могут быть потеряны, если процесс попадет в KILL/SEGV/ABRT/и т.д. Добавлен тег "linux-kernel" в надежде, что какой-нибудь знающий человек может перезвонить.