Ich habe ein C ++ Programm unter Linux, ist es möglich, dass es regelmäßig Snapshots im Shared Memory für die Wiederherstellung nach dem Absturz speichert?

9

Ich bin mir nicht sicher, wie ich vorgehen soll, da ich Beispiele für den gemeinsamen Speicher für Interprozesskommunikation gesehen habe. Ich fragte mich, ob ich es von einem Server aus nutzen könnte, um zum Beispiel periodische Schnappschüsse bestimmter Objekte zu machen und sie in irgendeinem Format im Shared Memory abzulegen, was ... wenn mein Programm abstürzt..bei Neustart des Programms für teilweise abgerufen werden konnte Wiederherstellung. Ist das machbar? Wenn ja, was kann ich mir ansehen, um loszulegen?

UPDATE: Ich habe irgendwo gelesen, dass shared memory auf linux (ich bin auf linux) persistent ist, also dachte ich, dass ich in der Lage sein würde, Snapshots in regelmäßigen Abständen zu speichern, ohne dass ein Hilfsprozess nötig wäre. Sagen wir zum Beispiel eine sich ständig aktualisierende Struktur, die ich alle paar Sekunden im Shared Memory ablege. Der Grund, warum ich anstelle einer Datei Shared Memory wählen würde, ist rein für die Geschwindigkeit, da der Zustand eine Menge binärer Daten wäre.

    
Palace Chan 12.04.2013, 14:38
quelle

1 Antwort

4

Nur eine Idee (nicht probiert) auf Uni * x Systemen.

Führen Sie eine Verzweigung (2) aus und senden Sie ein SIGTRAP-Signal an diesen untergeordneten Prozess (oder an ein beliebiges Signal , die einen Core Dump erstellt).

Fork erstellt eine Kopie der ursprünglichen Prozessumgebung. Dies wird den gesamten Speicherstatus ausgeben. Dann kann es von gdb (oder ähnlich) analysiert werden. Natürlich ist es nicht zur Erholung ...

Sie können eine gdbinit -Datei erstellen und Sie können die Variablen von einem Skript, das gdb aufruft, mit der Core-Datei ausgeben.

Warum wird der gemeinsame Speicher benötigt? Ist es nicht gut, den Zustand auf die Festplatte zu entladen?

Ich denke, dass dies auch für die Wiederherstellung genutzt werden kann. Perl -u Kommandozeilenargument macht ähnliches. Es analysiert die Skriptdatei und speichert eine Kerndatei. Diese Kerndatei kann von undump Programm, um den Kern direkt in den Speicher zu laden und Perl ohne die Parsing-Phase zu starten.

    
TrueY 12.04.2013, 14:48
quelle

Tags und Links