Ihre Aufgabe ist es, einen Speicherverlust zu erstellen . Dies ist ein Programm, das sehr viel Speicher benötigt, bis der Computer nicht mehr ausreicht und ein wenig ausgetauscht werden muss, um sich selbst vor dem Auslaufen zu schützen. Die einzige Möglichkeit, den Speicher freizugeben, besteht darin, das Programm im Task-Manager zu beenden oder einen Befehlszeilen-Kill taskkill /im yourprogram /f
(unter Windows) auszuführen oder den Computer neu zu starten. Das bloße Schließen der App sollte nicht verhindern, dass der Speicher weiterhin überlastet wird.
Regeln:
Gabelbomben jeglicher Art sind verboten. Das bedeutet, dass die berüchtigte Bash- Linie
:(){ :|:&};:
verboten ist!Die Anwendung darf nur mit einem Thread ausgeführt werden. Dies impliziert die Regel der Gabelbomben.
Das Programm darf keine anderen Programme ausführen. Das bedeutet, dass Sie nicht einfach so etwas tun können
run(memoryfiller.exe)
. Die einzige Ausnahme hiervon sind Programme, die mit Ihrem Betriebssystem oder Ihrer Sprache gebündelt sind und nicht primär zur Speicherbelegung vorgesehen sind (dh einen anderen Zweck haben). Das heißt, Dinge wiecat
undln -s
sind erlaubt.Sie können so viel Speicher belegen, wie Sie möchten. Je mehr desto besser.
Code muss vollständig erklärt werden.
Viel Glück. Dies ist ein Beliebtheitswettbewerb, bei dem der Code mit den meisten Stimmen nach 10 Tagen ab dem fraglichen Datum gewinnt!
quelle
while(1)malloc(999);
?Antworten:
Windows
Die Win32-API ermöglicht es Ihnen, Speicher in anderen Prozessen zuzuweisen und diesen Speicher dann remote zu lesen / schreiben. Dieses Programm verfügt nur über einen Thread, mit dem jeder auf dem System ausgeführte Prozess aufgelistet wird. Anschließend werden in jedem Prozess wiederholt 1-MB-Puffer zugewiesen, bis die Zuordnung fehlschlägt. Wenn ein Vorgang abgeschlossen ist, wird der nächste fortgesetzt. Die Zuweisungen werden nicht freigegeben, wenn das aufrufende Programm beendet ist - nur wenn / wenn jeder Zielprozess beendet ist. Dadurch bleibt eine Windows 7-VM mit 2 GB in etwa 10 Sekunden hängen. Es erfordert die Ausführung als Administrator.
Kompilieren:
cl /MD leak.cpp /link psapi.lib
quelle
Java
Erläuterung
Sie können davon ausgehen, dass der Code keine Verweise enthält (außer denen
count
, die Sie ignorieren können) und daher nicht lecken kann. Der Finalizer erstellt jedoch zwei neue Hydras. Auch wenn es für diese keine Referenzen gibt, bleiben sie bis zum Abschluss hängen. Dies bedeutet, dass das Programm nur während der Garbage Collection Speicherplatz verliert - daher die Aufrufe vonSystem.gc()
undSystem.runFinalization()
.quelle
System.gc()
undSystem.runFinalization()
notwendig? Das heißt, wird der gc manchmal zufällig ausgeführt, oder müssen Sie entweder etwas Speicher füllen oder gc aufrufen?System.gc()
undSystem.runFinalization()
wäre nicht notwendig. Speicherbereinigung würde natürlich aufgrund von Speicherdruck passieren. In dieser Anwendung gibt es jedoch keinen Speicherdruck, bis die Speicherbereinigung gestartet wird. Ich dachte darüber nach, einige künstlich einzuführen (z. B. indem ich michnew Hydra()
innerhalb der Schleife bewege ), dachte aber, dass dies schlimmer ist.C
Unter Verwendung der Programmiersprache C und getestet mit Linux-Kernel 2.6.32-49-generic und libc-2.11.1.so.
Dies wird erreicht, indem alle Signale außer SIGKILL und SIGSTOP blockiert werden.
Das hat mich wirklich verwirrt ... Das Beenden oder Schließen beider Prozesse führt zum Abbruch des Prozesses und ermöglicht dem Betriebssystem, den vom Prozess zugewiesenen Speicher zurückzugewinnen. Aber dann musste ich denken, dass Sie mit dem Schließen des Terminals oder eines anderen übergeordneten Prozesses, der den Speicherverlust ausführt, möglicherweise das Terminal schließen möchten. Wenn ich das richtig verstanden habe, habe ich dieses Problem gelöst, indem ich alle Signale blockiert habe, die den Prozess in einen Daemon verwandeln, wenn der übergeordnete Prozess beendet wird. Auf diese Weise können Sie das Terminal schließen, in dem der Prozess ausgeführt wird, und es wird weiter ausgeführt, und es tritt ein Speicherverlust auf.
Der Prozess gibt nicht auf.
Es werden keine neuen Threads erzeugt.
Es werden keine neuen Prozesse erzeugt.
So viel das Betriebssystem bieten kann.
Der Quelle wurden Kommentare hinzugefügt.
Und zum Schluss hier der Code:
Für alle, die daran interessiert sind, was passiert, wenn Sie dieses Programm am Laufen halten: Auf meinem Testsystem mit 2 GB RAM und 4 GB Swap-Speicher dauerte es ungefähr 10 Minuten, um den RAM aufzufüllen und zu tauschen. Der OOM-Killer hat seine Arbeit aufgenommen und drei Minuten später wurden alle Prozesse beendet. Sogar Maus, Tastatur und Display wurden vom System entfernt. /var/log/kern.log zeigt außer den Prozessen, die beendet wurden, keine nützlichen Informationen an.
quelle
Pure Bash
Keine Gabelbombe, das verspreche ich:
Es sieht einer Gabelbombe sehr ähnlich und verwendet eine ähnliche rekursive Technik, jedoch keine Gabeln. Natürlich führt dies dazu, dass Ihre Shell nicht mehr genügend Speicher hat. Es wird daher empfohlen, vor dem Einfügen dieses Befehls eine neue Shell zu starten.
:
$@
(arg list) double auf:
Funktion mit einem Anfangsargument aufgerufen:
Ausgabe:
In einer früheren Bearbeitung dieser Antwort habe
a=$(yes)
ich die Regel "Das Programm darf kein anderes Programm ausführen" beachtet, daher muss ichbash
stattdessen pure verwenden, ohne coreutils oder irgendetwas anderes aufzurufen.Hier ist ein anderes:
BITTE LAUFEN SIE DAS NICHT AUF EINER PRODUKTIONSMASCHINE
Auch dies ist keine Gabelbombe - alles wird innerhalb eines Threads ausgeführt. Dieser scheint meine Ubuntu-VM recht handlich in die Knie zu zwingen, mit wenig Raum für die Wiederherstellung, außer für einen Neustart.
Wie bei der klassischen Gabelbombe wird eine rekursive Funktion
:()
definiert. Es leitet jedoch keine Anrufe an sich selbst weiter. Stattdessen ruft es sich mit einem Argument auf, das selbst in einer Prozessersetzung aufgerufen wird . Da die Prozessersetzung durch Öffnen eines Dateideskriptors funktioniert/dev/fd/n
, wird dadurch nicht nur der Prozessspeicher (Bash), sondern auch der Kernelspeicher aufgebraucht. Auf meinem Ubuntu-Rechner führt dies dazu, dass der Fenstermanager nach ein paar Sekunden und kurz nach dem Beenden dieses Bildschirms nicht mehr funktionsfähig ist:Wenn Sie auf klicken,
OK
wird der folgende Bildschirm angezeigt:Keine dieser Optionen scheint eine große Hilfe zu sein - an diesem Punkt scheint ein Neustart die einzig gute Option zu sein.
quelle
$ which yes
->/usr/bin/yes
XML
Übergeben Sie das Dokument dann an einen XML-Parser, der keine Entitätsreferenzschleifen- / Rekursionserkennung durchführt. Zum Beispiel
xpath
in Perl enthalten:Wie es funktioniert:
<boom a="&a;">
"&a;"
in"&b;&b;"
"&b;"
In"&c;&c;"
(bei der Rückkehr wird das andere erweitert"&b;"
)"&c;"
etc ...Wenn die volle Ausdehnung eintreten könnte, würde sich "ka-boom!" Unter der Annahme von 2 Bytes pro Zeichen wird versucht, 64 PiB zu verwenden. Die Erweiterung geht "Ka-Boom!" Sie können also normalerweise beobachten, wie der gesamte Speicherplatz in Anspruch genommen wird.
Dies geschieht unter verschiedenen Namen, eine gute Übersicht finden Sie hier: http://projects.webappsec.org/w/page/13247002/XML%20Entity%20Expansion
quelle
C ++
Dieser Code war unerwartet! Es hat meinen Computer aufgehängt, während der Task-Manager geöffnet war, und es hat gezeigt, dass es 890 MB Speicher in 1 Sekunde in Anspruch nahm, und dann hat es auch aufgehängt. Ich weiß nicht, wie das funktioniert, vielleicht gibt es einer Variablen weiterhin Speicherplatz. Um mehr von diesem Code zu erfahren, habe ich eine Anweisung hinzugefügt,
delete a;
und beim Testen war alles in Ordnung (kein Hängen) gegeben (aufgrundnew int
) und dann zurück (aufgrunddelete a
) auf den freien Speicherplatz im neuen Code unten.Daraus schließe ich, dass KEIN RAM IN DIESER WELT DIESEN CODE BEHANDELN KANN !!!
BEARBEITEN : Aber viele Prozessoren können zB
intel core 2 duo
nicht mit diesem Code umgehen aberintel core i-series
können (hat bei mir geklappt ...)Denken Sie daran, dass die Antwort auf die Frage der erste Code ist, der zweite dient der Erklärung.
quelle
new int
, dass Sie den Zeiger immer noch verwenden werden , obwohl Sie ihn überschrieben haben, sodass Sie nie wieder darauf zugreifen können. Es wird also keine Speicherbereinigung aufgerufen, und Sie füllen den Speicher schneller auf, als ein dickes Kind Kegel frisstBrainFuck
Erläuterung:
Um in die Schleife zu gelangen, wird die Zelle auf 1 erhöht. Sie bewegt sich zur nächsten Zelle und erhöht diese auf 1, solange die letzte Zelle positiv war.
Normalerweise weist ein BrainFuck-Interpreter einen Fehler auf, da die Anzahl der Zellen auf dem Band stark begrenzt ist, aber einige Interpreter fügen Zellen dynamisch hinzu. Diese verbrauchen so lange Speicher, bis sie nicht mehr benötigt werden.
beef
ist ein solcher Interpreter, der im Ubuntu Software Center verfügbar ist. Mein aktueller Lauf auf einem unbenutzten Computer wurde vor 29 Stunden gestartet und hat in dieser Zeit 1 GB RAM verbraucht. Hier ist die Ausgabe vontop
Es hat 4 GB Cache und 6 GB Swap, also werde ich diese Antwort wahrscheinlich mit dem Stand der Dinge in 12 Tagen aktualisieren.
UPDATE 03.24 17:11
UPDATE 03.31 00:20
Es läuft also schon seit 10 Tagen. Es sieht so aus, als würde es noch mindestens 10 Stunden laufen, bevor etwas Interessantes passiert.
quelle
C und POSIX
Hier strebe ich eine hoch portable Lösung an. Das Problem ist, dass Pure C dem Betriebssystem nicht mitzuteilen scheint, dass der Speicher nach dem Schließen des Programms reserviert bleiben soll. Also erlaube ich mir, POSIX zu benutzen; Die meisten Betriebssysteme haben einen gewissen Anspruch auf POSIX-Kompatibilität, einschließlich Windows, Linux und MacOS X. Ich habe es jedoch nur auf Ubuntu 12.04 32bit getestet. Es sind keine Superuser-Berechtigungen erforderlich.
Diese Lösung ist im Wesentlichen die traditionelle
while(1){malloc(1);}
Lösung. Anstelle von malloc werden jedoch die POSIX-Shared-Memory-Funktionen verwendet. Da jeder Zuordnung ein gemeinsamer Speicherbezeichner zugewiesen wird, kann auch nach Beendigung des Vorgangs auf den Speicher zugegriffen werden. Somit kann der Kernel den Speicher nicht freigeben.quelle
C #
Das Abbestellen von Ereignissen, bevor der Handler den Gültigkeitsbereich verlässt, führt zu einem Speicherverlust in .NET, bis OutOfMemoryException ausgelöst wird.
Erläuterung : In der
while
Schleife erstellen wir ein neues Objekt, wodurch das Framework mehr SpeicherB
zuweist. Wir verhindern jedoch auch, dass die neue Instanz freigegeben wird, wenn sie den Gültigkeitsbereich verlässt, indem wir einem Ereignis in einer anderen Klasse eine Instanzmethode zuweisen. Dies hat zur Folge, dass die neue Instanz vonB
in unserem Code nicht mehr erreichbar ist, aber immer noch eine Referenz vorhanden ist, was bedeutet, dass der GC sie erst freigibt, wenn siea
ebenfalls nicht mehr gültig ist.Bei statischen Ereignissen besteht die gleiche Gefahr, da sie den Gültigkeitsbereich nie verlassen. Sie werden nur dann bereinigt, wenn der Prozess beendet wird, es sei denn, Sie haben sich zuerst vom Ereignis abgemeldet. Speichern Sie immer Ihre Referenzen, Leute!
Das Obige funktioniert auf der gleichen Idee: Der Handler ist nicht mehr erreichbar, sobald die
while
Schleife den Gültigkeitsbereich verlässt, sodass das Abbestellen des Ereignisses nicht mehr möglich ist. Dies bedeutet, dass der Speicher dort verbleibt, bis das Programm beendet wird. Statische Ereignisse sind wahrscheinlich gefährlicher als Instanzereignisse, da Sie sicherstellen können, dass sie niemals den Gültigkeitsbereich verlassen.BEARBEITEN : Sie können dasselbe auch mit praktisch jedem anderen Objekt tun, solange Sie eine Referenz hinzufügen und gleichzeitig sicherstellen, dass es keine Möglichkeit gibt, diese Referenz freizugeben.
In diesem Beispiel werden statische Objekte und Arrays verwendet.
Arrays werden weiterhin zur Liste hinzugefügt, aber es gibt keine Möglichkeit, die Liste zu löschen, ohne den Code zu ändern, was für Closed-Source-Anwendungen unmöglich wäre.
Leak.Add
Wenn Sie die Zahl erhöhen, an die übergeben wird, wird das Leck schneller ausgelöst. Wenn Sie sie hoch genug einstellen, wird lediglich eine sofortige OverflowException ausgelöst.quelle
Bash (keine externen Dienstprogramme)
Keine Gabelbombe hier.
Warnung: Es könnte Ihre Muschel töten.
Ich versuche nur, ein Array von Ganzzahlen zu Referenzzwecken zu erstellen, da ich immer wieder vergesse, wie Ganzzahlen aussehen.
Ergebnisse in:
quelle
J (7)
WARNUNG: Dies hat mein System eingefroren, als ich es ausprobiert habe (Windows 8, J 8.01 im qt-Terminal).
2#
verdoppelt die Länge des Arguments durch Duplizieren jedes Elements,^:_
Findet den Fixpunkt der gegebenen Funktion (aber es gibt keinen, so dass es endlose Schleifen gibt),[_
nennt es mit_
als Argument.quelle
Haskell (Grahams Nummer)
Es ist sehr einfach: Dies berechnet die Grahamsche Zahl
Im Gegensatz zu anderen Beispielen wird es nicht für immer laufen ... es wird eine Menge CPU verbrauchen, aber theoretisch könnte es enden. wenn es nicht die Tatsache wäre, dass die Nummer zu speichern ...
(laut Wikipedia)
Die Idee ist also, dass der Speicher von einer (Reihe von zunehmend) enormen
Integer
(Haskell's Integer sind von beliebiger Größe) genutzt wird.Wenn Sie es ausprobieren möchten, müssen Sie möglicherweise die Stapelgröße erhöhen oder es einlegen
ghci
.quelle
Inspiriert von @comintern.
Ersetzt / dev / null. Sneaky-Modus aktivieren. Benötigt Kernel-Header, Superuser-Modus und einen funktionierenden Compiler.
Habe Spaß.
Makefile:
Quellcode:
Achtung, dies kann einen Neustart erzwingen!
Es zu entfernen:
quelle
Rubin
Jeder kennt diese Summe (1 / n ^ 2) = pi ^ 2/6
So kann ich eine Approximationsfunktion definieren:
Natürlich läuft die (1..infinity) wild.
Beachten Sie jedoch, dass die Verwendung von Lazy diese Arbeit machen würde;)
quelle
C -
2825 Zeichen (Vollprogramm)Führen Sie das nicht aus, sonst wird Ihr System schnell eingefroren!
Der Aufruf von malloc reserviert 9 Byte Speicher und fordert regelmäßig neue Speicherseiten vom Betriebssystem an. Der von malloc zugewiesene Speicher wird sofort gelöscht, da kein Zeiger auf die zurückgegebene Adresse gespeichert wird. Sobald dem System der Arbeitsspeicher (RAM und Auslagerungsspeicher) ausgeht oder das Speicherlimit für den Prozess erreicht ist, bricht das Programm die while-Schleife ab und wird beendet.
quelle
main(){while(malloc(9));}
Speichert weitere 3 Zeichen und füllt mein Gedächtnis so ziemlich augenblicklich.VBScript
Wir erstellen ein Wörterbuch, das auf sich selbst verweist. Dann denken wir, dass wir das Wörterbuch zerstören, indem wir es auf Nothing setzen. Das Wörterbuch ist jedoch noch im Speicher vorhanden, da es eine gültige (zirkuläre) Referenz hat.
Die Schleife, aber auch das Speicherproblem, führt dazu, dass das Programm hängt. Nach dem Beenden des Programms wird der Speicher weiterhin verwendet. Das System kann nur durch einen Neustart wiederhergestellt werden.
quelle
Ja & tmpfs
Warum ein neues Programm schreiben, wenn man mit Ubuntu kostenlos kommt?
Wie Sie wahrscheinlich wissen oder bereits erraten haben, hängt Ubuntu / run / user / standardmäßig als tmpfs ein, eine Art RAM-Datenträger .
Sie müssen es nicht einmal schließen. Es wird sich höflich schließen und einen schönen Teil des zugewiesenen Speichers hinterlassen. Ich gehe davon aus, dass
yes
es sich um ein Single-Threaded-Programm mit nur einem Prozess handelt, das kein anderes Programm aufruft (das Schreiben auf eine vorhandene RAM-Disk ist auch problemlos in die Sprache Ihrer Wahl übertragbar).Es hat einen kleinen Fehler: Ubuntu begrenzt die vom Benutzer beschreibbaren tmpfs / run / 1000 standardmäßig auf 100 MB, so dass die Funktion zum Auslagern des Todes möglicherweise nicht sofort auf Ihrem Computer unterstützt wird. Es gelang mir jedoch, dieses Problem auf meinem Computer mit der folgenden schnellen Problemumgehung zu beheben:
quelle
/run/user
Verzeichnis. Welche Ubuntu-Version verwenden Sie und was haben Sie dafür installiert?tmpfs
Dateisysteme gemountet haben, können Sie diese mit auflistendf -t tmpfs
. Mein Ubuntu-System hat eine schöne große zur/run/shm
Verfügung ...Bash
Warnung: Der folgende Code führt dazu, dass Ihr Computer nicht mehr gestartet werden kann.
Warnung: Der vorstehende Code führt dazu, dass Ihr Computer nicht mehr gestartet werden kann.
Ersetzen Sie / dev / sda durch Ihr Boot-Laufwerk. Dies schreibt E8 FD FF an den Anfang Ihres Bootsektors. Beim Booten liest das BIOS Ihren Bootsektor in den Speicher und führt ihn aus. Diese Opcodes entsprechen dieser Assembly:
Dies ist eine unendliche Rekursion, die schließlich einen Stapelüberlauf verursacht.
quelle
jmp
anstelle voncall
Haskell
Dies versucht, die Zählnummern zu addieren. Haskell wertet die Teilsummen aus, es wird nur eine unendliche Additionsanweisung. Wenn Sie den Compiler mit Optimierungsflags ausführen, funktioniert er möglicherweise nicht.
quelle
Bash
Da wir Dienstprogramme verwenden können , die Speicher verbrauchen nicht speziell darauf ausgelegt sind, konzentriere ich mich auf ein Dienstprogramm , um Speicher frei:
swapon
. Damit kann der Kernel Speicher freigeben, indem er auf die Festplatte schreibt.Dieses Skript führt zwei Optimierungen durch: (1) Mounten von tmp als tmpfs (eine Art RAM-Datenträger), um / tmp schneller zu machen, und (2) Erstellen einer Auslagerungsdatei, um Speicher freizugeben. Jedes von diesen ist für sich vernünftig, aber wenn ein unachtsamer Benutzer beides tut, richtet er einen Austauschzyklus ein: Wenn das Betriebssystem versucht, Seiten auszutauschen, schreibt es in die tmpfs; Dadurch verwenden die tmpfs mehr Speicher. Dies erhöht den Speicherdruck, wodurch mehr Seiten ausgetauscht werden. Dies kann auf meiner VM einige Minuten dauern, und Sie haben genügend Zeit, um zu beobachten, wie sich das System mithilfe von in ein Loch gräbt
top
.Das Schließen des Programms macht wenig Unterschied, da das Programm selbst kaum Speicherplatz belegt. Tatsächlich ist es nicht trivial, Speicher
swapoff
freizugeben, da Sie Speicher nicht freigeben können, indem Sie die Bereitstellung der tmpfs vor der Auslagerungsdatei aufheben. Dies ist schwierig, bis Sie Speicher freigegeben haben.Diese Antwort könnte als Warnung gegen das Erblinden angesehen werden, indem coole Tricks aus dem Netz angewendet werden, ohne sie zu verstehen.
quelle
Perl
Verwendet Zirkelverweise. Die Referenzanzahl für die Variablen wird niemals 0 erreichen, und die Referenzen werden niemals durch Müll gesammelt.
Möglicherweise müssen Sie geduldig sein, aber es wird garantiert, um Ihr System zu ersticken. Die Scheibe würde sich schneller drehen und Dämpfe könnten sichtbar sein.
quelle
PHP (nur Linux):
Dieser Code ist ungetestet, da ich keinen Linux-Computer mit PHP habe.
Aber das ist mein Proof of Concept:
Dadurch wird der Speicher mit riesigen RGBA-Bildern (10000 x 10000 Pixel) gefüllt.
Die einzige Möglichkeit, dieses Baby auszuschalten, besteht darin, den Strom abzuschalten.
Der Code ist alles kommentiert.
Bei Verbesserungen, Zweifeln, Fehlern oder Ähnlichem verwenden Sie das Kommentarfeld unten.
quelle
Python - 56
Erstellt eine Klasse, definiert eine Methode zum Festlegen von Attributen, legt ein Attribut darin fest und erstellt eine Anfangsinstanz, von der dann versucht wird, ein Attribut festzulegen.
Eine einfache rekursive Funktion (
def f(x):f(x)
) schien ein wenig einfallslos zu sein, deshalb habe ich beschlossen, nie eine Funktion aufzurufen .Die Speicherverwaltung erfasst möglicherweise die Rekursionstiefe, hängt jedoch wirklich von der Implementierung ab.
Wenn dies eine Gabelbombe ist, sag es mir bitte.
quelle
RuntimeError: maximum recursion depth exceeded while calling a Python object
. Sogar das Festlegen der maximalen Rekursionsgrenze mitsys.setrecursionlimit
fast keinem Speicher wird verwendet, bevor es mit einem Segmentierungsfehler abstürzt.Perl
Es ist einfach, aber ich wollte es spielen.
$x
Enthält nach zwei Iterationen einen Verweis auf ein Array, das einen Verweis auf ein Array enthältundef
.Die Speichernutzung ist zeitlich linear, mit kleinen Zuordnungen, aber es dauerte nur einige Sekunden, um meinen Fenstermanager auf meinem Ubuntu Linux-System stark zu verlangsamen. Eine halbe Minute später kümmerte sich der OOM-Killer darum.
quelle
ECMAScript 6:
Ungolfed:
Hinweis: Es wird verwendet
setTimeout
, was als Teil von Timern definiert ist - der HTML-Living-Standard .Probieren Sie es in Mozilla Firefox aus (Sie können es in die Entwicklerkonsole einfügen). Firefox verbraucht immer mehr Speicher und nutzt
100%
die CPU auf einem Single-Core-Rechner (auf einem 4-Core-Rechner, wie meinem, wird25%
die CPU verwendet). Es hat auch den zusätzlichen Vorteil, dass Sie es nicht aufhalten können; Wenn Sie den Task-Manager öffnen können, können Sie Firefox damit beenden.quelle
Bash
Erstellen Sie eine leere Datei
test
Ersetzen Sie
/dev/null/
durch diese Textdatei$ sudo mv test /dev/null
Dies funktioniert auf ähnliche Weise wie die Antwort von @ Comintern. Die gesamte Ausgabe
/dev/null
wird nun an diese Textdatei angehängt, die mit der Zeit sehr umfangreich wird und das System zum Absturz bringt.quelle
/dev
sich ein befindetdevtmpfs
, kann es das System füllen und behindern. Ich schätze, das ist die Absicht dieser Antwort.Bash: 7 Zeichen
Dies sollte die einfachste Bash-Lösung sein. Keine Gabeln, kein Schummeln.
Es wird empfohlen, dies nicht als root auszuführen.
quelle
unset
der Variablen beenden , bleibt der Speicher so lange reserviert, bis die Shell beendet wird. Sie können das Gemetzel in beobachtentop
.unset x
der Speicher frei wird. pdksh gibt auch den Speicher frei, aber ksh93 kann ihn nicht freigeben undexit
sichert in ksh93 den Kern.yes
wird. An diesem Punkt bleibt sie einfach dort undunset
hat keine Auswirkung. Aber dies ist auf einem großen Speichersystem und eine Variable, die mehrere Gigabyte groß ist, scheint es nicht zu stören (bis sie schließlich entscheidet, die Shell zu töten).C
Nun, es braucht Seite für Seite Speicher und schließlich ist kein Speicher mehr vorhanden.
quelle
Rubin
Es hängt einfach endlos (rekursiv!) Selbstreferenzen an sich selbst an.
Fand über dieses kleine Juwel heraus, als jemand meine Ruby Sandbox damit brach . : D
Demo der rekursiven Aspekte davon:
quelle
C ++ 79
Nicht golfen
Ich habe meinen Eintrag so korrigiert, dass er einen Anruf von der Hauptleitung enthält.
quelle