Lesen Sie /usr/src/linux/Documentation/sysctl/kernel.txt.
core_pattern wird verwendet, um den Musternamen einer Core-Dumpdatei anzugeben.
- Wenn das erste Zeichen des Musters ein '|' ist, behandelt der Kernel den Rest des Musters als auszuführenden Befehl. Der Core-Dump wird in die Standardeingabe dieses Programms anstatt in eine Datei geschrieben.
Anstatt den Core-Dump auf die Festplatte zu schreiben, ist Ihr System so konfiguriert, dass es an abrt
gesendet wird (bedeutet:Automated Bug Reporting Tool, nicht "abort") Programm statt. Das automatisierte Fehlerberichtstool ist möglicherweise nicht so dokumentiert, wie es sein sollte...
In jedem Fall lautet die schnelle Antwort, dass Sie Ihre Kerndatei in /var/cache/abrt
finden sollten , wobei abrt
speichert es nach dem Aufruf. In ähnlicher Weise können andere Systeme, die Apport verwenden, Kerne in /var/crash
wegwerfen , und so weiter.
Auf neuerem Ubuntu (in meinem Fall 12.04) ist es möglich, dass „Segmentation fault (core dumped)“ gedruckt wird, aber keine Core-Datei erzeugt wird, wo Sie eine erwarten könnten (z. B. für ein lokal kompiliertes Programm).
Dies kann passieren, wenn Sie eine Core-Dateigröße ulimit von 0 haben (Sie haben ulimit -c unlimited
nicht ausgeführt ) – dies ist die Standardeinstellung auf Ubuntu. Normalerweise würde das "(core dumped)" unterdrücken, um Sie auf Ihren Fehler hinzuweisen, aber unter Ubuntu werden Kerndateien über /proc/sys/kernel/core_pattern
an Apport (Ubuntus Absturzmeldesystem) geleitet , und dies scheint die irreführende Meldung zu verursachen.
Wenn Apport feststellt, dass das fragliche Programm keins ist, sollte es Abstürze melden (was Sie in /var/log/apport.log
sehen können ), greift es auf die Simulation des standardmäßigen Kernel-Verhaltens zurück, bei dem eine Core-Datei in die cwd eingefügt wird (dies geschieht im Skript /usr/share/apport/apport
). Dies schließt die Anerkennung von ulimit ein, in diesem Fall tut es nichts. Aber (ich nehme an), was den Kernel betrifft, wurde ein Corefile generiert (und an apport geleitet), daher die Meldung "Segmentation fault (core dumped)".
Letztendlich PEBKAC dafür, dass ich vergessen habe, ulimit zu setzen, aber die irreführende Nachricht ließ mich eine Weile denken, ich würde verrückt werden und mich fragen, was meine Kerndateien frisst.
(Auch allgemein die Handbuchseite von core(5) -- man 5 core
-- ist eine gute Referenz dafür, wo Ihre Kerndatei landet und warum sie möglicherweise nicht geschrieben wird.)