[LINUX] [Bash] Lassen Sie uns jetzt die Gabelbombe analysieren

Einführung

** * Selbstverständlich übernehmen Sie bitte die versprochene Eigenverantwortung **

Die berühmte Gabelbombe. Für Bash: :(){ :|: & };:

Dieses Prinzip kam mir nicht in den Sinn, deshalb habe ich versucht, es zu analysieren **, nachdem ich die Operation (!) ** bestätigt hatte.

Es ist in der richtigen Reihenfolge aufgeführt (oder schlimmer noch, schlampig), daher würde ich es begrüßen, wenn Sie es nur als Lesematerial (Gedicht) lesen könnten.

Hauptgeschichte

Geändert, um das Lesen und Ablegen zu erleichtern

Verwenden Sie "Bombe" als Funktionsnamen anstelle von ":". bomb() { bomb | bomb & }; bomb

Der Tropfen ließ es ** großartig explodieren und erforderte einen Neustart **. Vor allem Erfolg? ist!

Versuchen Sie, im Vordergrund zu laufen

Es ist mühsam, jedes Mal neu zu starten. Stellen wir es also in den Vordergrund.

bomb() { bomb | bomb ; }; bomb

Dies explodiert ebenfalls, aber es scheint, dass es durch Strg + C oder Schließen des Terminals wiederhergestellt werden kann. Dieser Vordergrundlauf wird zur Analyse fortgesetzt.

Versuch zu schlafen

In ähnlicher Weise scheint die Analyse einige Zeit in Anspruch zu nehmen, sodass ich etwa 10 Sekunden warten werde.

bomb() { sleep 10 ; bomb | bomb ; }; bomb

Wenn Sie es in einem anderen Terminal überprüfen, können Sie sehen, dass es ** langsam in Richtung Ruine ** geht. (Die folgenden "-bash" und "sleep 10" werden mit der Zeit zunehmen)

user@user-VirtualBox:~$ ps -f -u user | grep pts/2
user     25428 25363  0 15:54 ?        00:00:00 sshd: user@pts/2
user     25429 25428  0 15:54 pts/2    00:00:00 -bash
user     26605 25429  0 15:56 pts/2    00:00:00 -bash
user     26606 25429  0 15:56 pts/2    00:00:00 -bash
user     26607 26606  0 15:56 pts/2    00:00:00 sleep 10
user     26608 26605  0 15:56 pts/2    00:00:00 sleep 10
user     26612 25777  0 15:56 pts/3    00:00:00 grep --color=auto pts/2

Bereiten Sie das Protokoll vor

Versuchen Sie, sich in einer Datei namens "foo" anzumelden. Sie können es immer noch mit einem Liner lesen.

bomb() { sleep 10 ; echo `date +%H:%M:%S.%3N`: Throw 2 bombs... >> foo ; bomb | bomb ; }; bomb

Protokollbestätigungsergebnis in einem anderen Terminal:

user@user-VirtualBox:~$ tail -f foo
16:15:14.374: Throw 2 bombs...
16:15:24.378: Throw 2 bombs...
16:15:24.379: Throw 2 bombs...
16:15:34.384: Throw 2 bombs...
16:15:34.385: Throw 2 bombs...
16:15:34.388: Throw 2 bombs...
16:15:34.389: Throw 2 bombs...

Was für ein wunderbares Protokoll (Selbstlob)!

  1. Lassen Sie zwei um 16:15:14 fallen
  2. Lassen Sie 2 + 2 = 4 um 16:15:24 fallen
  3. Lassen Sie 2 + 2 + 2 + 2 = 8 um 16:15:34 fallen

Daher wurde klar, dass ** die Anzahl der Bomben (Prozesse) im Spiel ** mal zunimmt! Es wäre beängstigend, wenn ich 10 Sekunden nicht geschlafen hätte! Lol

Versuche einen zu machen

Jeder wird sich fragen (nicht wahr?), Was ist mit einem? ist.

bomb() { sleep 10 ; echo `date +%H:%M:%S.%3N`: Throw a bomb... >> foo ; bomb ; }; bomb

Das Protokoll ist ein natürliches Ergebnis:

user@user-VirtualBox:~$ tail -f foo
16:28:09.661: Throw a bomb...
16:28:19.664: Throw a bomb...
16:28:29.668: Throw a bomb...

Das Bestätigungsergebnis des Prozesses lautet wie folgt (in geeigneten Intervallen bestätigt):

user@user-VirtualBox:~$ ps -f -u user | grep pts/2
user     25428 25363  0 15:54 ?        00:00:00 sshd: user@pts/2
user     25429 25428  0 15:54 pts/2    00:00:00 -bash
user     26743 25429  0 16:28 pts/2    00:00:00 sleep 10
user     26746 25777  0 16:28 pts/3    00:00:00 grep --color=auto pts/2
user@user-VirtualBox:~$ ps -f -u user | grep pts/2
user     25428 25363  0 15:54 ?        00:00:00 sshd: user@pts/2
user     25429 25428  0 15:54 pts/2    00:00:00 -bash
user     26748 25429  0 16:28 pts/2    00:00:00 sleep 10
user     26750 25777  0 16:28 pts/3    00:00:00 grep --color=auto pts/2
user@user-VirtualBox:~$ ps -f -u user | grep pts/2
user     25428 25363  0 15:54 ?        00:00:00 sshd: user@pts/2
user     25429 25428  0 15:54 pts/2    00:00:00 -bash
user     26754 25429  0 16:28 pts/2    00:00:00 sleep 10
user     26756 25777  0 16:28 pts/3    00:00:00 grep --color=auto pts/2
user@user-VirtualBox:~$

Sie können sehen, dass der ursprüngliche "-bash" -Prozess die ganze Zeit aktiv ist und der "sleep 10" -Prozess separat gestartet wird ("26743" → "26748" → "26754").

Mit anderen Worten, der neue Prozess wird ausgeführt, aber der vorherige Prozess wird jedes Mal beendet, sodass er nicht multipliziert wird.

Einfach ausgedrückt ist es eine Endlosschleife, die einfach die Bombe ** wiederholt.

Versuchen Sie, aus einem Rohr ein Semikolon zu machen

Aber was ist, wenn der Abstand zwischen den beiden Bomben ";" statt "|" ist?

bomb() { sleep 10 ; echo `date +%H:%M:%S.%3N`: Throw 1st bomb... >> foo ; bomb ; echo `date +%H:%M:%S.%3N`: Throw 2nd bomb... >> foo ; bomb ; }; bomb

user@user-VirtualBox:~$ tail -f foo
16:42:05.384: Throw 1st bomb...
16:42:15.387: Throw 1st bomb...
16:42:25.390: Throw 1st bomb...

Du hast die "2. Bombe" nicht erreicht. Dies liegt daran, dass die "1. Bombe" die ganze Zeit wiederholt wird und die Substanz dieselbe ist wie bei einer Bombe.

abschließend

Impressionen (Gedicht)

Sehen heißt glauben. Es war eine einfache Methode, aber sie wurde wieder schlauer. Lol

Bestätigungsumgebung

--Ubuntu 18.04 LTS (auf VM)

Recommended Posts

[Bash] Lassen Sie uns jetzt die Gabelbombe analysieren
Lassen Sie uns die Daten der Fragebogenumfrage analysieren [4 .: Emotionsanalyse]
Lassen Sie uns jetzt die Mehrdeutigkeit des Bindestrichs (-) des Befehls su beseitigen! !!
Lassen Sie uns die Emotionen von Tweet mit Chainer (2.) analysieren.
Lassen Sie uns die Emotionen von Tweet mit Chainer (1.) analysieren.