- AVERTISSEMENT N'ESSAYEZ PAS DE L'EXÉCUTER SUR UNE MACHINE DE PRODUCTION
En lisant la page Wikipedia sur le sujet, je suis généralement ce qui se passe avec le code suivant:
:(){ :|:& };:
extrait de description
La bombe à fourche suivante a été présentée comme art en 2002;56 son origine exacte est inconnue, mais elle existait sur Usenet avant 2002. La bombe est exécutée en collant les 13 caractères suivants dans un shell UNIX tel que bash ou zsh . Il fonctionne en définissant une fonction appelée «:», qui s'appelle deux fois, une fois au premier plan et une fois en arrière-plan.
Cependant, le dernier morceau n'est pas entièrement clair pour moi. Je vois la définition de la fonction:
:(){ ... }
Mais que se passe-t-il d'autre? Est-ce que d'autres obus tels que ksh
, csh
et tcsh
subissent également le même sort de pouvoir construire quelque chose de similaire?
la source
Réponses:
Cette bombe fourchue me rappelle toujours quelque chose qu'un professeur de programmation d'IA a dit lors d'une des premières leçons auxquelles j'ai assisté "Pour comprendre la récursivité, vous devez d'abord comprendre la récursivité".
Au fond, cette bombe est une fonction récursive . En substance, vous créez une fonction, qui s'appelle, qui s'appelle, qui s'appelle .... jusqu'à ce que les ressources système soient consommées. Dans ce cas précis, la récursivité est amplifiée par l'utilisation de la fonction de tuyauterie pour elle-même ET de son arrière-plan.
J'ai vu cette réponse sur StackOverflow , et je pense que l'exemple donné ici l'illustre mieux, juste parce qu'il est plus facile de voir ce qu'il fait en un coup d'œil (volé à partir du lien ci-dessus ...)
Définissez la fonction de bogue
☃() { ... }
, dont le corps s'appelle (la fonction de bogue), redirigez la sortie vers elle-même (la fonction de bogue)☃|☃
, et mettez le résultat en arrière-plan&
. Puis, après la fonction est définie, appelez en fait la fonction de bogue,; ☃
.Je note qu'au moins sur ma machine virtuelle Arch, la nécessité d'arrière-plan du processus n'est pas une exigence pour avoir le même résultat final, pour consommer tout l'espace de processus disponible et rendre l'hôte b0rked. En fait, maintenant, j'ai dit qu'il semblait parfois mettre fin au processus de fuite et qu'après une sélection,
-bash: fork: Resource temporarily unavailable
il s'arrêterait avec unTerminated
(et montrait le vidage dujournalctl
noyau bash).Pour répondre à votre question sur csh / tcsh, aucun de ces shells ne prend en charge les fonctions, vous pouvez uniquement créer un alias. Donc, pour ces shells, vous devez écrire un script shell qui s'appelle récursivement.
zsh semble subir le même sort (avec le même code), ne fait pas de vidage de mémoire et oblige Arch à donner
Out of memory: Kill process 216 (zsh) score 0 or sacrifice child.
, mais il continue à bifurquer. Après un certain temps, il indique ensuiteKilled process 162 (systemd-logind) ...
(et continue d'avoir un zsh de fourche).Arch ne semble pas avoir de
pacman
version de ksh, j'ai donc dû l'essayer sur debian à la place. ksh objecte en:
tant que nom de fonction, mais en utilisant quelque chose - dire à lab()
place semble avoir le résultat souhaité.la source
Ctrl+Shift+u+<hex>
où hex est le code hexadécimal du caractère unicode que vous souhaitez afficher. Une liste des unicodes visibles peut être trouvée à: fileformat.info/info/unicode/utf8test.htm (la plupart des bizarres sont dans les sections "divers"). Windows devrait commander superuser.com/questions/47420/… , et j'utilise personnellement l'outil mentionné dans le lienunicodeinput.exe
ou le copier-coller via mon navigateur. Vous pouvez toujours utiliser des séquences html comme suggéré par sambler.