Это было кратко упомянуто выше как «неудавшийся запрос ввода-вывода», но я немного подробнее остановлюсь на этом.
Часто случается, когда вы лениво увеличиваете файл с помощью ftruncate, отображаете его в память, начинаете записывать данные, а затем исчерпываете место в вашей файловой системе. Физическое пространство для сопоставленного файла выделяется при ошибках страницы, если ничего не осталось, процесс получает SIGBUS.
Если вам нужно, чтобы ваше приложение корректно восстанавливалось после этой ошибки, имеет смысл явно зарезервировать пространство до mmap с помощью fallocate. Обработка ENOSPC в errno после вызова fallocate намного проще, чем обработка сигналов, особенно в многопоточном приложении.