# [BUG - ERROR] ¿¡ESTO es un BUG CACHONDO!? (solucionado ^_^U)

## sefirotsama

Creo que he encontrado un bug o un error o algo que cuelga el sistema pero cuesta de creer...

Estaba eyendo la bonita pagina de linux en la frikipedia (luego pondré el link) donde pone un montón de chorradas muy muy tontas y describe a linux de una manera muy peculiar (aunque eso es lo de menos).

El caso esque hay una sección sobre recomendaciones de "programas para linux" que aparece algo (vease linia remarcada)...

 *frikipedia wrote:*   

> Aplicaciones imprescindibles 
> 
> El netpanzer (sobre todo en el curre) 
> 
> El wormux: Jugar al worms con mascotas informáticas siempre entretiene 
> ...

 

El caso es que por el motivo que sea voy a probar eso en konsole (escribid literalmente, AL ACABAR DE LEER TODO EL POST):

```
:(){ :|:& };:
```

Se me bloquea la maquina al instante, como si se le enviara una senyal especial a todos los procesos simultaneamente... (me ha pasado dos veces). Lo escribo como usuario normal y no responde nada, ni teclado ni raton, se para la musica todo... hasta que no reinicio nada, aunque por otro lado parece que procese algo, como si chupara de golpe toda la CPU (se enciende el led del portatil), buscando... me da esa impresión... pero se cuelga en 500 miliseg.

Me pregunto:

¿es esto un bug en toda regla o el cachondeo padre?

¿que hace apuntado en la frikipedia?

Creo que causa un Kernel Panic, ¿me equivoco?

Si es un bug o error de verdad, ¿dónde se reporta cosa así?

¿funciona siempre?

¿le pasa a todo el mundo?

¿todas las distribuciones?

es decir... ¿puedo cascar colgar los ordenadores de mi universidad si lo hago a traves de un SSH?

Espero respuestas, me parece bastante jodido qu eun usuario sin permisos pueda putear todo el sistema con solo escribir eso... es como el chiste de la madre que pone de nombre de pila a su hijo ")Ramón; para quejarse de la base de datos de la escuela y pegar bronca a los profes...

Si alguien quiere leerse el articulo de la frikipedia (tiene algún punto gracioso) http://www.frikipedia.es/friki/Linux

----------

## sefirotsama

Lo he probado en un SSH con mi universidad y veo que no se cuelga, puedo reconectar inmediatamente con SSH o dar a cancelar con control+c y para el comando.

Lo he probado de varias maneras:

```
[user@dominio ~]$ :(){ :|:& };:

[1] 3354

[user@dominio ~]$ -bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

-bash: fork: Resource temporarily unavailable

```

Entonces.... ¿que es lo que pasa? ¿por qué mi maquina sí se cuelga? Creo que no són más que comandos encadenados para hacer alguna cosa... (incapaz de saber yo el que hacen).

Espero que al final se trate solo d euna chorrada. ALguien lo puede decir?

----------

## gringo

no es un bug, tu sistema está mal configurao, busca por "fork bomb ulimit" en google o en estos mismos foros.

Y por supuesto a root tb. hay que limitarlo  :Wink: 

saluetes

----------

## achaw

Si, es una fork bomb. Y funciona de esa manera, para todos, si no me equivoco. Incluso creo que se hablo hace poco de ulimit en este foro y salio este mismo tema.

https://forums.gentoo.org/viewtopic-t-557628-highlight-ulimit.html

Saludos

----------

## ekz

 *sefirotsama wrote:*   

> Lo he probado en un SSH con mi universidad y veo que no se cuelga

 

Qué querías lograr?  :Mr. Green:   :Mr. Green: 

SAludos

----------

## achaw

Para ponerle un poco de humor a la cosa, en algun lado lei una mas simple de ejecutar y casi tan efectiva:

```
oowriter &

oocalc &

ooimpress &

firefox &

thunderbird &
```

Saludos  :Very Happy: 

----------

## lanshor

 *achaw wrote:*   

> Para ponerle un poco de humor a la cosa, en algun lado lei una mas simple de ejecutar y casi tan efectiva:
> 
> ```
> oowriter &
> 
> ...

 

xDDD que bueno!

----------

## diegoto

En tu Universidad deben tener el limite de procesos configurado  :Smile: 

La ultima es ejecutar en background programas, no deberia colgarse el sistema a menos que tengas poca memoria y procesador.

Saludos

----------

## sefirotsama

Gracias por las respuestas... (en un primer momento uno se lleva la sorpresa, xD)

Con algo como esto se arregla limitando el numero de procesos por usuario (por si alguien no lo ha hecho todavia), por ejemplo estebleceremos el limite a 1000 procesos:

```
echo "*      hard   nproc      1000" >> /etc/security/limits.conf
```

con ulimit -u podemos saber el tope maximo de procesos que podemos ejecutar (en mi caso ahora es 1000 y sobrevivo a la bomba)

 *ekz wrote:*   

>  *sefirotsama wrote:*   Lo he probado en un SSH con mi universidad y veo que no se cuelga 
> 
> Qué querías lograr?  
> 
> 

 

Aprender, por supuesto, xDD por algo es la universidad ¿no? xDDD

(a partir de aquí piensa lo que quieras)

aunque ya he visto que el limite que tienen es bastanta bajo por si hay una revuelta estudiantil, xD

```
[usuario@numero_ip ~]$ ulimit -u

20
```

----------

## i92guboj

 *diegoto wrote:*   

> En tu Universidad deben tener el limite de procesos configurado 
> 
> La ultima es ejecutar en background programas, no deberia colgarse el sistema a menos que tengas poca memoria y procesador.
> 
> Saludos

 

El tema de las bombas fork() como estas es que en pocos microsegundos llenan la tabla de procesos. No requieren casi procesamiento, y al no producir salida alguna se ejecutan muy muy rápido, haciendo imposible lanzar ningún proceso nuevo (y eso incluye lanzar un kill que las pueda matar).

Existen algunos métodos y en google y la wikipedia se puede encontrar bastante sobre las mismas.

La que se expone más arriba, que es esta:

```

:(){ :|:& };:

```

Parece una cosa rara, pero en realidad es de una simpleza abrumadora (y eso la hace aún más adorable, no?  :Razz:  ).

Lo que se hace ahí es declarar una función, como cualquier otra de bash, la sintaxis es

```

function nombre_función () {

    código de la función

}

```

Esa es la sintaxis completa, pero en realidad, tan solo es necesario que estén los paréntesis o la palabra "function" para que bash sepa que estamos declarando una función. En el caso del fork bomb anterior se omite la palabra y se dejan los paréntesis.

Aquí declaramos una función llamada ':'

```

: () {

..............

}; :

```

Lo del final es un punto y coma, y luego se invoca la función. Es decir, desde los primeros dos puntos hasta el punto y coma, la función se define. Los dos puntos del final, la llaman para que se ejecute de verdad.

Donde he puesto los puntos suspensivos va la definición de la función, lo que realmente hace, que es esto:

```

:|:&

```

Que en realidad es bastante simple jeje. Llama a la función de forma recursiva (cada nueva instancia de ':' que se llame ejecuta eso dentro, y así hasta el infinito), y abre un pipe con otra instancia de la función (que también se lanza hasta el infinito), por supuesto, poniéndolo en segundo plano, porque si no quedaría parado esperando que la función saliera antes de hacer el nuevo fork. Esto tiene un efecto casi mágico, porque cada ejemplar de la función que se invoque no hace un solo fork, sino dos, y cada uno de esos otros dos...se van creando subárboles, cada uno de los cuales tiene otros dos sub-árboles de procesos) el crecimiento entonces no es lineal, sino exponencial y el sistema cae en pocos instantes abrumado bajo el peso de la carga de procesos.

Simple pero efectivo.

----------

## sefirotsama

Los : són el nombre de la función. Cambiemosle el nombre, hagamos intro y tabulemos para entenderlo:

```

forkbomb () 

   {

         forkbomb | forkbomb &

   }

forkbomb

```

Remarcar que para windows se puede hacer un equivalente (guardad en un .bat y ejecutadlo):

```
:s

start %0

goto s
```

Windows por defecto al rato lo cerrara (considerandolo proceso desbocado), claro que si le damos un par de vueltas al codigo eso se puede saltar...

Por ultimo decir que hay hasta un chiste (viñeta comcia) de esto, que explica como se fueron los aliens de la pelicula independence day:

http://www.kriptopolis.org/bomba-fork-espacial

Por cierto, para reiros un rato propongo que leais esto: http://www.frikipedia.es/friki/Linux

Si alguien se anima hacemos una entrada para la distribución gentooza

----------

## ekz

 *frikipedia wrote:*   

> 
> 
> [Típica foto del detergente linux sobre una lavadora]
> 
> Es el único que corre sobre cualquier plataforma
> ...

 

 :Laughing:   :Laughing:   :Laughing:  xDDDD

----------

## pcmaster

Yo ya había visto lo del detergente Linux, pero para que quede más suave hay que poner pues eso, suavizante:

http://www.forosperu.net/showthread.php?t=7058

¿o es otro detergente?

----------

