Was ist% 0 |% 0 und wie funktioniert es?

77

Wenn Sie eine .bat- oder .cmd-Datei mit " %0|%0inside" ausführen, verbraucht Ihr Computer viel Speicher und wird nach einigen Minuten neu gestartet. Warum blockiert dieser Code Ihr Windows? Und was macht dieser Code programmgesteuert? Könnte es als "Fehler" angesehen werden?

Doon
quelle
1
Mögliches Duplikat der Batch-Gabelbombe?
Cerbrus

Antworten:

140

Dies ist die Windows-Version einer Gabelbombe .

%0ist der Name der aktuell ausgeführten Batchdatei. Eine Batchdatei, die nur diese Zeile enthält:

%0|%0

Wird sich für immer rekursiv ausführen, schnell viele Prozesse erstellen und das System verlangsamen.

Dies ist kein Fehler in Windows, es ist nur eine sehr dumme Sache, in einer Batch-Datei zu tun.

Jonathon Reinhart
quelle
7
Warum bricht% 0 |% 0 Fenster,% 0 jedoch nicht?
Pavel
14
@Pavel: Was eine .batDatei tut, ist: Leseanweisung , am Ende der Datei beenden. Wenn Sie% 0 ausführen: Prozess 1: wird gestartet, führen Sie% 0 aus (erstellen Sie also Prozess 2). dann sterben Prozess 2: startet, führe% 0 aus (also erstelle Prozess 3); dann stirb [...] du hast immer höchstens 2 Prozesse ausgeführt, weil der Schöpfer sterben wird. Der Punkt der Gabelbombe ist es, 2 Versionen zu erstellen. Somit erzeugt P1 2 Prozesse (1 'und 1 "), diese beiden Prozesse erzeugen jeweils 2 (also 4), die exponentiell verlaufen.
pltrdy
38

Dies ist als Gabelbombe bekannt. Es teilt sich so lange auf, bis es keine andere Möglichkeit gibt, als das System neu zu starten. http://en.wikipedia.org/wiki/Fork_bomb

Harrison Dyer
quelle
1
@ RohanGala: $0; $0(funktioniert in Bash und Zsh, getestet auf Ubuntu 14.04)
SilverWolf - Reinstate Monica
Beachten Sie, dass Sie es mit ⌃C stoppen können. Sie müssen SIGINT ignorieren oder trennen, um dies zu verhindern. (:
SilverWolf - Stellen Sie Monica
1
: () {: |: &};: ist eine Version
Andreas
25

Was es ist:

%0|%0ist eine Gabelbombe . Es wird ein weiterer Prozess mithilfe einer Pipe erzeugt, |die asynchron eine Kopie desselben Programms ausführt. Dies belastet die CPU und den Speicher und verlangsamt das System bis zum Stillstand (oder stürzt sogar das System ab).

So funktioniert das:

%0bezieht sich auf den Befehl zum Ausführen des aktuellen Programms. Zum Beispiel,script.bat

Ein Pipe- |Symbol gibt die Ausgabe oder das Ergebnis der ersten Befehlssequenz als Eingabe für die zweite Befehlssequenz aus. Im Fall einer Gabelbombe gibt es keine Ausgabe, daher wird einfach die zweite Befehlssequenz ohne Eingabe ausgeführt.

Das Beispiel zu erweitern %0|%0könnte bedeuten script.bat|script.bat. Dies wird von selbst erneut ausgeführt, es wird jedoch auch ein anderer Prozess erstellt, um dasselbe Programm erneut auszuführen (ohne Eingabe).

Samuel Liew
quelle
6

Es ist eine Logikbombe, die sich ständig neu erstellt und alle CPU-Ressourcen beansprucht. Es überlastet Ihren Computer mit zu vielen Prozessen und zwingt ihn zum Herunterfahren. Wenn Sie eine Batch-Datei damit erstellen und starten, können Sie sie mit taskmgr beenden. Sie müssen dies ziemlich schnell tun, sonst ist Ihr Computer zu langsam, um etwas zu tun.

Edward
quelle