Core-Dump-Generierung unter Linux

3053
roymustang86

In Bezug auf meine Kiste geht etwas sehr Verwirrendes vor.

Im Folgenden sind meine Einstellungen in /etc/sysctl.conf:

kernel.core_pattern = core kernel.core_uses_pid = 1 

In habe /etc/profileich folgendes:

ulimit -S -c unlimited >/dev/null 2>1 

Und ich überprüfe alles, indem ich mir Folgendes anschaue:

cat /proc/sys/kernel/core_pattern cat /proc/sys/kernel/core_uses_pid 

Wenn wir also a ulimit -causführen, wird ein Wert von zurückgegeben unlimited.

Wenn wir ein tun ulimit -S -c, wird ein Wert von zurückgegeben unlimited.

Wenn wir ein tun ulimit -H -c, wird ein Wert von zurückgegeben unlimited.

Und wenn ich kill -6gegen einen laufenden Prozess starte, verstehe ich keinen Kern.

Wenn ich ulimit -c unlimitedden Prozess erneut starte und wieder starte kill -6, wird ein Kern generiert.

Kann jemand erklären, was der Unterschied zwischen Soft Limit und Hard Limit ist?

Und sollten wir die harte Grenze überhaupt ändern?

Ich mag diese Situation nicht, weil die Kerne manchmal erzeugt werden und manchmal nicht.

Selbst wenn ich die Limits.conf ändere, würde ich wirklich gerne wissen, was ich mache.

Ein paar weitere Dinge, die ich offen legen muss, ist, dass ich in einer RHEL 6-Umgebung (x86_64) laufe.

Und dass genügend Speicherplatz zur Verfügung steht, und es ist kein DAEMON-Prozess oder ein Setuid-Programm. Der Ordner verfügt über ausreichende Berechtigungen, um neue Dateien zu erstellen, und es gibt keine Dateien / Ordner mit dem Namen core im Laufzeitverzeichnis.

1

2 Antworten auf die Frage

0
jjlin

Sie können über harte vs. weiche Limits im Abschnitt "Bash-Handbuch" auf ulimit nachlesen .

Da Sie sagen, dass Sie eine Kerndatei erhalten, wenn Sie das Programm von Ihrer Shell aus neu starten, besteht das Problem wahrscheinlich darin, dass der ursprüngliche Prozess in einer /etc/profilelesenden Umgebung nicht gestartet wird (diese Datei wird nur für Login-Shells gelesen). Sie könnten in Betracht ziehen ulimit -c unlimited, das Skript, das dieses Programm startet, zu ergänzen (natürlich vor der Zeile, in der es gestartet wird).

0
roymustang86

Der ganze Grund, warum dies geschah, war, dass das Skript in sh-Prompt ausgeführt wurde, im Gegensatz zu Bash-Prompt, wo das ulimit gesetzt wurde. Ist das nicht komisch? Wir haben das Skript so geändert, dass es in bash läuft, und es funktioniert jetzt einwandfrei.