** * Inutile de dire, veuillez prendre la responsabilité personnelle promise **
La célèbre bombe Fork. Pour Bash:
:(){ :|: & };:
Ce principe ne m'est pas venu à l'esprit, alors j'ai essayé de l'analyser ** après avoir confirmé l'opération (!) **.
Il est répertorié dans l'ordre (ou pire, bâclé), donc j'apprécierais que vous puissiez simplement le lire comme matériel de lecture (poème).
Utilisez bomb
comme nom de fonction au lieu de:
.
bomb() { bomb | bomb & }; bomb
Une fois lâché, il a explosé ** et a dû être redémarré **. Tout d'abord le succès? est!
Il est difficile de redémarrer à chaque fois, alors mettons-le au premier plan.
bomb() { bomb | bomb ; }; bomb
C'est aussi en train d'exploser, mais il semble qu'il puisse être restauré par Ctrl + C ou en fermant le terminal. Cette exécution au premier plan se poursuivra pour l'analyse.
De même, il semble que l'analyse prendra du temps, je vais donc attendre environ 10 secondes.
bomb() { sleep 10 ; bomb | bomb ; }; bomb
Si vous le vérifiez dans un autre terminal, vous pouvez voir qu'il se dirige ** lentement vers la ruine **. (Les «-bash» et «sleep 10» suivants augmenteront avec le temps)
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
Essayez de vous connecter à un fichier appelé «foo». Vous pouvez toujours le lire avec une seule doublure.
bomb() { sleep 10 ; echo `date +%H:%M:%S.%3N`: Throw 2 bombs... >> foo ; bomb | bomb ; }; bomb
Le résultat de la confirmation du journal dans un autre 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...
Quel merveilleux journal (éloge de soi)!
Par conséquent, il est devenu clair que ** le nombre de bombes (processus) augmente dans le jeu ** fois! Ce serait effrayant si je n'avais pas dormi pendant 10 secondes! Lol
Tout le monde se demandera (n'est-ce pas?), Et un? est.
bomb() { sleep 10 ; echo `date +%H:%M:%S.%3N`: Throw a bomb... >> foo ; bomb ; }; bomb
Le journal est un résultat naturel:
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...
Le résultat de la confirmation du processus est le suivant (confirmé à des intervalles appropriés):
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:~$
Vous pouvez voir que le processus original -bash
est actif tout le temps et que le processus sleep 10
est lancé séparément ( 26743
→ 26748
→ 26754
).
En d'autres termes, le nouveau processus est en cours d'exécution, mais le processus précédent est terminé à chaque fois, il ne se multiplie donc pas.
Pour le dire clairement, c'est une boucle infinie qui répète simplement bombe **.
Mais que se passe-t-il si l'espace entre les deux bombes est «;» au lieu de «|»?
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...
Vous n'avez pas atteint la «2e bombe». C'est parce que la «1ère bombe» est répétée tout le temps, et la substance est la même que dans le cas d'une bombe.
Voir c'est croire. C'était une méthode simple, mais elle est redevenue plus intelligente. Lol
--Ubuntu 18.04 LTS (sur VM)
Recommended Posts