** * 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.
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!
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.
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
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)!
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
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.
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.
Sehen heißt glauben. Es war eine einfache Methode, aber sie wurde wieder schlauer. Lol
--Ubuntu 18.04 LTS (auf VM)
Recommended Posts