Na najnowszym Ubuntu (w moim przypadku 12.04) możliwe jest wydrukowanie „Błąd segmentacji (zrzut rdzenia)”, ale nie powstaje plik rdzenia, w którym można się spodziewać (na przykład dla programu kompilowanego lokalnie).
Może się to zdarzyć, jeśli masz podstawowy rozmiar pliku ulimit 0 (nie zrobiłeś tego ulimit -c unlimited
) - jest to domyślny rozmiar w Ubuntu. Zwykle tłumiłoby to „(rdzeń zrzucony)”, wprowadzając cię w błąd, ale w Ubuntu pliki rdzeniowe są przesyłane do Apport (system zgłaszania awarii Ubuntu) przez /proc/sys/kernel/core_pattern
, i wydaje się, że powoduje to mylący komunikat.
Jeśli Apport odkryje, że dany program nie jest tym, dla którego powinien zgłaszać awarie (w których się dzieje /var/log/apport.log
), wraca do symulacji domyślnego zachowania jądra polegającego na umieszczeniu pliku podstawowego w cwd (odbywa się to w skrypcie /usr/share/apport/apport
). Obejmuje to honorowanie ulimit, w którym to przypadku nic nie robi. Ale (zakładam), jeśli chodzi o jądro, został wygenerowany plik rdzenia (i przesłany do apportu), stąd komunikat „Błąd segmentacji (zrzut rdzenia)”.
Ostatecznie PEBKAC za to, że zapomniał ustawić ulimit, ale wprowadzająca w błąd wiadomość sprawiła, że pomyślałem, że oszalałem przez chwilę, zastanawiając się, co zjadło moje pliki core.
(Ogólnie rzecz biorąc, strona podręcznika core (5) - man 5 core
- jest dobrym źródłem informacji o tym, gdzie kończy się Twój plik podstawowy i jakie mogą być powody, dla których nie można go zapisać).