Esta bomba tenedor siempre me recuerda lo que dijo un profesor de programación de IA en una de las primeras lecciones a las que asistí "Para comprender la recursividad, primero debes comprender la recursividad".
En esencia, esta bomba es una función recursiva . En esencia, crea una función, que se llama a sí misma, que se llama a sí misma, que se llama a sí misma ... hasta que se consuman los recursos del sistema. En este caso específico, la recursión se amplifica mediante el uso de canalizar la función hacia sí misma Y trasladarla en segundo plano.
He visto esto respondido en StackOverflow , y creo que el ejemplo dado allí lo ilustra mejor, solo porque es más fácil ver lo que hace de un vistazo (robado del enlace de arriba ...)
☃(){ ☃|☃& };☃
Defina la función de error ☃() { ... }
, cuyo cuerpo se llama a sí mismo (la función de error), canalizando la salida a sí mismo (la función de error) ☃|☃
y trasfondo del resultado &
. Entonces, después de definir la función, en realidad llamar a la función error, ; ☃
.
Observo que al menos en mi Arch VM, la necesidad de poner en segundo plano el proceso no es un requisito para tener el mismo resultado final, para consumir todo el espacio de proceso disponible y hacer que el host se bloquee. En realidad, ahora he dicho que a veces parece terminar el proceso de fuga y después de una pantalla completa -bash: fork: Resource temporarily unavailable
se detendrá con un Terminated
(y journalctl
muestra bash core dump).
Para responder a su pregunta sobre csh / tcsh, ninguno de esos shells admite funciones, solo puede usar alias. Entonces, para esos shells, tendría que escribir un script de shell que se llame a sí mismo de forma recursiva.
zsh parece sufrir el mismo destino (con el mismo código), no volca el núcleo y hace que Arch ceda Out of memory: Kill process 216 (zsh) score 0 or sacrifice child.
, pero aún continúa bifurcando. Después de un tiempo, luego declara Killed process 162 (systemd-logind) ...
(y aún continúa teniendo una bifurcación zsh).
Arch no parece tener una pacman
versión de ksh, así que tuve que probarlo en Debian. ksh se opone a :
como un nombre de función, pero usando algo, digamos, en b()
cambio, parece tener el resultado deseado.