В недавнем Ubuntu (12.04 в моем случае) возможно распечатать «Ошибка сегментации (сброшено ядро)», но файл ядра не был создан там, где вы могли бы его ожидать (например, для локально скомпилированной программы).
Это может произойти, если у вас размер основного файла ulimit 0 (вы этого не сделали ulimit -c unlimited
) - это значение по умолчанию в Ubuntu. Обычно это подавляет «(ядро сброшено)», что указывает на вашу ошибку, но в Ubuntu файлы ядра отправляются в 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 и почему он не может быть записан.)