GNU/Linux >> Tutoriales Linux >  >> Linux

El comando Bash :(){ :|:&};:generará procesos hasta la muerte del kernel. ¿Puedes explicar la sintaxis?

:(){ :|:& };:

..define una función llamada : , que se genera a sí mismo (dos veces, uno se conecta al otro) y se pone en segundo plano.

Con saltos de línea:

:()
{
    :|:&
};
:

Cambiar el nombre del : función a forkbomb :

forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

Puedes prevenir este tipo de ataques usando ulimit para limitar el número de procesos por usuario:

$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$

Más permanentemente, puede usar /etc/security/limits.conf (en Debian y otros, al menos), por ejemplo:

* hard nproc 50

Por supuesto, eso significa que solo puede ejecutar 50 procesos, ¡es posible que desee aumentar esto dependiendo de lo que esté haciendo la máquina!


Eso define una función llamada : que se llama a sí mismo dos veces (Código:: | : ). Lo hace en segundo plano (& ). Después del ; la definición de la función está hecha y la función : comienza.

Así que cada instancia de :comienza dos nuevos :y así sucesivamente... Como un árbol binario de procesos...

Escrito en C simple que es:

fork();
fork();

Linux
  1. La diferencia entre los operadores Bash [[ Vs [ Vs ( Vs ((?)

  2. ¿Comprender el signo de exclamación (!) en Bash?

  3. ¿Se puede ejecutar Xcode en Linux?

  4. ¿Cómo puedo recordar el argumento del comando bash anterior?

  5. '&&' vs. '&' con el comando 'test' en Bash

4 formas de editar un PDF con el comando pdftk-java

30 cosas que no sabías sobre el kernel de Linux

Cómo usar el comando de lectura Bash

La lista de atajos de teclado Bash útiles

¿Puede ps mostrar solo procesos que no sean del kernel en Linux?

¿Cuál es la sintaxis correcta de find -exec?