MSfree hat geschrieben:Du könntest z.B. /proc/meminfo überwachen, der Wert für MemAvailable zeigt die Menge des freien RAMs an.
Ich bin gestern bei ähnlicher Recherche auf /proc/self/status gestoßen, wo man den Speicherplatz ablesen kann, den das eigene Programm derzeit verwendet. Aber es ist etwas umständlich das auszulesen. Danach habe ich noch sysinfo(2) gefunden. Damit kann man den freien Speicherplatz recht elegant mit folgendem Code auslesen:
Code: Alles auswählen
#include "sys/types.h"
#include "sys/sysinfo.h"
...
struct sysinfo memInfo;
sysinfo (&memInfo);
long freeram = memInfo.freeram*memInfo.mem_unit;
Allerdings muss man dabei bedenken, dass ein Teil des Speicherplatzes für root reserviert ist. Man sollte also vorher einmal 3*memInfo.totalram*memInfo.mem_unit/100 ausrechnen und das dann als untere Grenze setzen (oder noch etwas mehr Platz lassen).
Irritiert bin ich etwas darüber, dass der Computer schon bei leichtem Überschreiten dieser Grenze "abstürzt" und dann auch langes Warten (ca. 1/2 Stunde) nichts mehr nutzt, selbst wenn der Prozess gar keinen neuen Speicher mehr an sich zieht.
Und damit komme ich auch schon auf einen anderen Punkt:
wanne hat geschrieben:Du kannst immer die Sys-Rescue-Tasten drücken, und die werden auch vergleichsweise schnell (<3s (Das ist fefühlt verdammt lange) tun.
Auf der Suche, was du mit "Sys-Rescue-Tasten" meinen könntest, bin ich auf ALT-Gr-Drucken-F gestossen. Theoretisch sollte man damit den Prozess, der am meisten Speicher verbraucht, killen können. Das kann ich nicht bestätigen; zumindest hat sich da nach minutenlangen Warten nichts getan. ALT-Gr-Drucken-B funktioniert, da startet der Rechner neu - die Festplatte wurde da nicht synchronisiert, auch nicht bei vorangehendem Alt-Gr-Drucken-S. Strg-Alt-Entf und Strg-Alt-Backspace hatten auch keine Wirkung.