Gibt es eine Möglichkeit, einen Core-Dump (oder ähnliches) für einen Prozess zu erstellen, ohne die Prozesse tatsächlich zu beenden? Ich habe einen Multithread-Python-Prozess auf einem eingebetteten System ausgeführt. Und ich möchte in der Lage sein, einen Schnappschuss des Prozesses unter normalen Bedingungen (dh mit den anderen Prozessen, die ausgeführt werden müssen) zu erhalten, aber ich habe nicht genug Speicher, um GDB zu verbinden (oder es unter GDB auszuführen), ohne den Python-Prozess als einziger läuft.
Ich hoffe diese Frage macht Sinn.
Antworten:
Der übliche Trick ist, etwas (evtl. ein Signal wie
SIGUSR1
) zum Auslösen des Programms zu bringenfork()
, dann ruft das Kindabort()
auf, um sich Core Dump zu machen.und während der Initialisierung
Auf diese Weise
fork
wird nicht viel zusätzlicher Speicher belegt, da fast der gesamte Adressraum gemeinsam genutzt wird (weshalb dies auch für die Generierung des Core-Dumps funktioniert).Früher wurde dieser Trick mit einem Programm verwendet, das aufgerufen wurde
undump
, um eine ausführbare Datei aus einem Core-Dump zu generieren, um ein Image nach einer komplexen Initialisierung zu speichern.emacs
wird dazu verwendet, um ein vorgeladenes Bild von zu generierentemacs
.quelle
Sie könnten versuchen, mit
gcore
. Ist das eine Option für dich?quelle