Warum funktioniert "(ulimit -d 1000; firefox) &" nicht?

757
MaxB

Ich versuche, die Speicherauslastung zu begrenzen firefox, um zu verhindern, dass das gesamte System bei problematischen Websites blockiert wird.

Ich habe versucht in bash:

(ulimit -d 1000; firefox) & 

Dies sollte die Speichernutzung auf 1000 KB begrenzen. Dann öffnete ich YouTube und bemerkte, topdass firefox2,6% des Speichers oder etwa 200 MB genutzt werden und nicht abgestürzt sind. Natürlich wird das Limit ignoriert. Warum ist das so und wie kann ich es richtig durchsetzen?

1
Äh, ich bin verwirrt. Soll '-d' den Haufen einschränken? Ich dachte, dass der Heap vom Datensegment getrennt betrachtet würde, aber die Manpage für `setrlimit (2)` besagt, dass `RLIMIT_DATA` die maximale Größe des Datensegments des Prozesses (initialisierte Daten, nicht initialisierte Daten und Heap) festlegt. ' rakslice vor 9 Jahren 0
@rakslice Wie Ihr Zitat vorschlägt, enthält das Datensegment alles. Unter Linux glaube ich, dass ein Prozess das Betriebssystem lediglich dazu auffordert, seinen "Speicherplatz" (Datensegment) zu ändern. Es liegt an der Bibliothek (libc), eine praktische Schnittstelle (Malloc / Heap) zu präsentieren. MaxB vor 9 Jahren 0
Funktioniert es ohne die Sub-Shell? Was passiert, wenn Sie `ulimit -d 1000 tun; Firefox`? Macht 'ulimit -m' auch, was Sie wollen? sds vor 9 Jahren 1

1 Antwort auf die Frage

3
Matías Moreno

Verwenden Sie stattdessen ulimit -v.

Erläuterung:

Bei aktuellen libc-Implementierungen wird die Größe des Datensegments nur für kleine Mallocs geändert. Große Mallocs verwenden anonyme mmap () - Befehle. Die einzige Möglichkeit, das Programm wirklich einzuschränken, besteht darin, stattdessen den virtuellen Speicher zu begrenzen (Schalter -v).

Hoffe das hilft.

PS: Ich weiß, dass diese Frage sehr alt ist, aber es wurde keine Lösung mit Google gefunden. Daher habe ich mich entschlossen, sie trotzdem zu beantworten.