Kerndateiformat
Zweck
Enthält ein Image eines Prozesses zum Zeitpunkt eines Fehlers.
Beschreibung
Der vom Prozess zugeordnete gemeinsam genutzte Speicher kann optional auch aus der Kerndatei ausgeschlossen werden. Diese Daten werden nur übergangen, wenn die Umgebungsvariable CORE_NOSHM exportiert wird. Standardmäßig wird der gesamte gemeinsam genutzte Speicher in die Kerndatei eingeschlossen. Die Variable CORE_NOSHM kann auf einen beliebigen Wert gesetzt werden.
Die eindeutige Benennung von Kerndateien wird nur aktiviert, wenn die Umgebungsvariable CORE_NAMING exportiert wird. Der Standardname lautet core wie in früheren Releases. Der Wert der Variablen sollte auf truegesetzt werden.
Der Inhalt eines Kernspeicherauszugs ist in der Datei Kern wie folgt sequenziell organisiert:
| Element | Beschreibung |
|---|---|
| Core-Header | Definiert Basisinformationen zum Kernspeicherauszug und enthält Offsets, die den Rest der Kernspeicherauszugsinformationen lokalisieren. |
| Ldinfo -Strukturen | Definiert Ladeprogramminformationen. |
| mstsave -Strukturen | Definiert Statusinformationen für Kernel-Threads. Da die Struktur des fehlerhaften Threads mstsave direkt im Kernheader gespeichert wird, werden hier zusätzliche Strukturen nur für Multithread-Programme gespeichert. |
| Standardbenutzerstack | Enthält eine Kopie des Benutzerstacks zum Zeitpunkt des Kernspeicherauszugs. |
| Standarddatenbereich | (Optional) Enthält den Benutzerdatenabschnitt. |
| Speicherzugeordnete Regionen | (Optional) Enthält die anonym zugeordneten Regionen. |
| VM-Info -Strukturen | (Optional) Enthält Offset-und Größeninformationen für speicherzugeordnete Regionen. |
Standardmäßig sind die Benutzerdaten anonym zugeordnete Regionen und VM-Info -Strukturen nicht in einem Kernspeicherauszug enthalten. Dieser partielle Kernspeicherauszug enthält den aktuellen Prozessstack, den Thread-Stack, die mstsave -Threadstrukturen, die Benutzerstruktur und den Status der Register zum Zeitpunkt des Fehlers. Ein partieller Kernspeicherauszug enthält genügend Informationen für ein Stack-Traceback. Die Größe eines Kernspeicherauszugs kann auch durch die Subroutine Setrlimit begrenzt werden.
Um einen vollständigen Kernspeicherauszug zu aktivieren, setzen Sie das Flag SA_FULLDUMP in der Subroutine Berechtigungsaktion für das Signal, das einen vollständigen Kernspeicherauszug generieren soll. Wenn dieses Flag gesetzt wird, wenn der Kernspeicherauszug erstellt wird, wird der Datenabschnitt, anonym zugeordnete Regionen und VM-Info -Strukturen in den Kernspeicherauszug eingeschlossen.
- Alle gedumpten Kerne befinden sich im Kontext des aktiven Prozesses. Sie werden mit einem Eigner und einer Gruppe erstellt, die der effektiven Benutzer-ID (UID) und Gruppen-ID (GID) des Prozesses entsprechen. Wenn dieses UID/GID-Paar keine Berechtigung zum Schreiben in das Zielverzeichnis hat, das gemäß den Standardkernpfadprozeduren bestimmt wird, wird kein Speicherauszug der Kerndatei erstellt.
- Wenn die reale Benutzer-ID (RUID) root ist, kann für die Kerndatei immer ein Speicherauszug erstellt werden, jedoch im Modus 0600.
- Wenn die effektive Benutzer-ID (EUID) mit der realen Benutzer-ID (RUID) übereinstimmt und die effektive Gruppen-ID (EGID) mit einer Gruppe in der Gruppenliste des Berechtigungsnachweises übereinstimmt, wird ein Speicherauszug der Kerndatei mit den Berechtigungen 0600 erstellt.
- Wenn die EUID mit der RUID übereinstimmt, die EGID jedoch mit keiner Gruppe in der Gruppenliste des Berechtigungsnachweises übereinstimmt, kann kein Speicherauszug der Kerndatei erstellt werden. Der effektive Benutzer kann keine Daten anzeigen, auf die er keinen Zugriff hat.
- Wenn die EUID nicht mit der RUID übereinstimmt, kann ein Speicherauszug der Kerndatei erstellt werden, wenn Sie mit dem Befehl Syscorepath ein Kernverzeichnis festgelegt haben. Dadurch wird vermieden, dass die Kerndatei so in das aktuelle Arbeitsverzeichnis oder in ein benutzerspezifisches Kernverzeichnis geschrieben wird, dass Sie die Kerndatei nicht entfernen können. Für den Kern wird ein Speicherauszug mit dem Modus 0600 erstellt. Wenn Sie den Befehl Syscorepath nicht zum Festlegen eines Kernverzeichnisses verwendet haben, wird kein Kernspeicherauszug erstellt.
Das Format des Kernheaders wird durch die Struktur core_dump (in der Headerdatei core.h ) definiert, die wie folgt organisiert ist:
| Element | Feldname | Beschreibung |
|---|---|---|
| char | C_signo | Die Nummer des Signals, das den Fehler verursacht hat. |
| char | c_flag | Ein Bitfeld, das den Kernspeicherauszugstyp beschreibt. Die Bits haben folgende Bedeutung:
|
| Uschort | C_einträge | Die Anzahl der Kernspeicherauszugsmodule. |
| Struktur ld_info * | C_tab | Der Offset zum Anfang der Kerntabelle. |
| caddr_t | C_stack | Der Offset zum Anfang des Benutzerstacks. |
| int | C-Größe | Die Größe des Benutzerstacks. |
| Struktur mstsave | C_mst | Eine Kopie der fehlerhaften MST |
| Struct-Benutzer | C U | Eine Kopie der Benutzerstruktur |
| int | C_nmsts | Die Anzahl der mstsave -Strukturen, auf die durch diec_mstsFeld |
| Struktur mstsave * | C_msts | Offset zu den mstsave -Strukturen der anderen Threads |
| int | C-Datengröße | Die Größe der Datenregion. |
| caddr_t | C_data | Offset zu Benutzerdaten |
| int | VM-Regionen | Die Anzahl der anonym zugeordneten Regionen. |
| Struktur vm_info * | C_vmm | Der Offset zum Anfang der Tabelle vm_info. |