GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Core-Dump, aber Core-Datei befindet sich nicht im aktuellen Verzeichnis?

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.)


Linux
  1. So finden Sie die älteste Datei in einem Verzeichnisbaum in Linux

  2. Wie erstelle ich ein neues Fenster im aktuellen Verzeichnis in Tmux?

  3. Befehl für jede Datei im aktuellen Verzeichnis ausführen

  4. Finden Sie die Dateien, die in einem Verzeichnis vorhanden sind, aber nicht im anderen

  5. Warum wird das Root-Verzeichnis durch ein /-Zeichen gekennzeichnet?

Warum ändert der folgende Weg die Größe der Kerndatei nicht?

Python – Keine solche Datei oder Verzeichnis, aber ich kann es sehen!?

Hinterlässt der Befehl Shuf File> File eine leere Datei, aber ähnliche Befehle nicht?

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

Die Verwendung von chown zum Ändern des Gruppeneigentümers eines Verzeichnisses ist nicht erlaubt....Warum?

Wie kopiere ich einen Verzeichnisbaum, aber nicht die Dateien in Linux?