В последних версиях Ubuntu (12.04 в моем случае) возможно распечатать «Ошибка сегментации (сброшено ядро)», но файл ядра не был создан там, где вы могли бы его ожидать (например, для локально скомпилированной программы).
Это может произойти, если у вас размер основного файла ulimit 0 (вы не сделали ulimit -c unlimited
) - это значение по умолчанию в Ubuntu. Обычно это подавляет "(core dumped)", что указывает на вашу ошибку, но в Ubuntu файлы corepile отправляются в Apport (система отчетов о сбоях Ubuntu) через /proc/sys/kernel/core_pattern
, и это, кажется, вызывает вводящее в заблуждение сообщение.
Если Apport обнаруживает, что рассматриваемая программа не та, о которой она должна сообщать о сбоях (что, как вы можете видеть, происходит в /var/log/apport.log
), она прибегает к моделированию поведения ядра по умолчанию при помещении файла ядра в cwd ( это делается в скрипте /usr/share/apport/apport
). Это включает в себя соблюдение ulimit, и в этом случае он ничего не делает. Но (я предполагаю), что касается ядра, был сгенерирован файл core (и передан для аппроксимации), отсюда и сообщение «Ошибка сегментации (ядро сброшено)».
В конечном счете, PEBKAC забыл установить ulimit, но вводящее в заблуждение сообщение заставило меня подумать, что я на некоторое время схожу с ума, задаваясь вопросом, что съедает мои основные файлы.
(Кроме того, как правило, страница справочника core (5) - man 5 core
- является хорошим справочным материалом о том, где заканчивается файл core и почему он не может быть записан.)