¿Por qué el comando ": () {: |: &} ;:" hizo que mi sistema se demore tanto que tuve que reiniciar?

272
  

PELIGRO !

     

No ejecute este comando para 'probarlo' a menos que esté preparado para un bloqueo y / o para reiniciar su sistema de forma forzada.

Estaba en mi Virtualbox ejecutando 12.04 tratando de compilar una aplicación, y mientras esperaba, tuve la oportunidad de encontrar un foro donde decía un comentario:

  

Pruebe :(){ :|: & };:
  También es divertido y no necesita root.

Sin pensarlo, lo ejecuté en mi terminal gnome. Hizo tan gravemente mi retraso de 12.04 (en Virtualbox) que tuve que cerrarlo.

Mi pregunta es ¿qué hace este comando?

:(){ :|: & };:
    
pregunta blade19899 04.07.2012 - 13:29

4 respuestas

344

Esto se llama fork bomb .

:() significa que está definiendo una función llamada :

{:|: &} significa ejecutar la función : y enviar su salida a la función : nuevamente y ejecutarla en segundo plano.

El ; es un separador de comandos, como && .

: ejecuta la función la primera vez.

Básicamente está creando una función que se llama a sí misma dos veces en cada llamada y no tiene forma de terminar. Seguirá duplicándose hasta que se te acaben los recursos del sistema.

Correr en Virtualbox era bastante sensato, de otro modo tendrías que reiniciar tu PC.

    
respondido por el SuperMatt 04.07.2012 - 13:34
159

Se trata de una fork bomb implementada en shell.

de la wikipedia:

:(){ :|:& };:
\_/| |||| ||\- ... the function ':', initiating a chain-reaction: each ':' will start    two more.
 | | |||| |\- Definition ends now, to be able to run ...
 | | |||| \- End of function-block
 | | |||\- disown the functions (make them a background process), so that the children    of a parent
 | | |||   will not be killed when the parent gets auto-killed
 | | ||\- ... another copy of the ':'-function, which has to be loaded into memory.
 | | ||   So, ':|:' simply loads two copies of the function, whenever ':' is called
 | | |\- ... and pipe its output to ...
 | | \- Load a copy of the function ':' into memory ...
 | \- Begin of function-definition
 \- Define the function ':' without any parameters '()' as follows:
    
respondido por el Michał Šrajer 04.07.2012 - 13:35
70

Ese comando es una versión muy conocida de la fork bomb

Hace que su computadora se quede sin memoria al hornear un proceso infinitamente. Existen algunas medidas de seguridad que puede usar en su contra también:

  

Los sistemas de tipo Unix suelen tener un límite de proceso, controlado por un comando de shell ulimit o su sucesor, setrlimit. Los kernels de Linux establecen y aplican RLIMIT_NPROC rlimit ("límite de recursos") de un proceso. Si un proceso intenta realizar una bifurcación y el usuario que posee ese proceso ya posee RLIMIT_NPROC procesos, entonces la bifurcación falla. Además, en Linux o * BSD, se puede editar el archivo de pam_limits config /etc/security/limits.conf para el mismo efecto. Sin embargo, no todas las distribuciones de Linux tienen el módulo pam_limits instalado por defecto.

    
respondido por el Nemo 04.07.2012 - 13:37
18

De acuerdo con esto :(){ :|: & };: se llama

  

Forkbomb es un tipo de creador de virus poético

     

... El pequeño programa tortuoso le ordena hacer copias múltiples de   en sí mismo, desencadenando una reacción en cadena y agotando rápidamente el   los recursos del sistema ...

Por lo tanto, se recomienda no ejecutar esto, ya que podría causar daños al hardware, ya que causa la ejecución en bucle, puede causar calentamiento fácilmente en las computadoras portátiles.

Otro enlace explica a través de capturas de pantalla aquí .

    
respondido por el atenz 04.07.2012 - 13:35

Lea otras preguntas en las etiquetas