Por que o comando “: () {: |: &} ;:” atrasou tanto o meu sistema que tive que reinicializar?

264
  

PERIGO !

     

Não execute este comando para "testá-lo", a menos que você esteja preparado para uma falha e / ou reinicialize seu sistema.

Eu estava no meu VirtualBox executando o 12.04 tentando compilar um aplicativo e, enquanto esperava, aconteça com um fórum em que um comentário dizia:

  

Tente :(){ :|: & };:
  Também é divertido e não precisa de root.

Sem pensar, eu corri no meu terminal gnome. Isso fez com que meu atraso de 12.04 (no Virtualbox) fosse tão ruim que tive que desligá-lo.

Minha pergunta é o que esse comando faz?

:(){ :|: & };:
    
por blade19899 04.07.2012 / 13:29
fonte

4 respostas

336

Isso é chamado de bomba garfo .

:() significa que você está definindo uma função chamada :

{:|: &} significa executar a função : e enviar sua saída para a função : novamente e executá-la em segundo plano.

O ; é um separador de comando, como && .

: executa a função na primeira vez.

Essencialmente, você está criando uma função que chama a si mesma duas vezes a cada chamada e não tem como terminar sozinha. Ele continuará dobrando até você ficar sem recursos do sistema.

A execução no Virtualbox foi bastante sensata, caso contrário você precisaria reiniciar o computador.

    
por SuperMatt 04.07.2012 / 13:34
fonte
154

Esta é uma chamada bomba bifurcada implementada no shell.

da 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:
    
por Michał Šrajer 04.07.2012 / 13:35
fonte
69

Esse comando é uma versão bem conhecida da bomba garfo

Isso faz com que seu computador fique sem memória, forçando um processo infinitamente. Existem algumas salvaguardas que você pode usar também:

  

Sistemas do tipo Unix geralmente possuem um limite de processo, controlado por um comando shell ulimit ou seu sucessor, setrlimit. Os kernels do Linux definem e impõem o RLITIT_NPROC rlimit ("limite de recurso") de um processo. Se um processo tentar executar uma bifurcação e o usuário que possui esse processo já possuir RLIMIT_NPROC processos, a bifurcação falhará. Além disso, no Linux ou * BSD, é possível editar o arquivo pam_limits config /etc/security/limits.conf para o mesmo efeito. No entanto, nem todas as distribuições do Linux têm o módulo pam_limits instalado por padrão.

    
por Nemo 04.07.2012 / 13:37
fonte
18

De acordo com este :(){ :|: & };: é chamado

  

Forkbomb é um tipo de criador de vírus poético

     

... O pequeno programa desonesto manda fazer várias cópias de   em si, desencadeando uma reação em cadeia e, assim, esgotando rapidamente o   recursos do sistema ...

Portanto, é aconselhável não executar isto, pode causar danos ao hardware, uma vez que causa a execução em loop, pode causar aquecimento facilmente em laptops.

Outro link explica através de capturas de tela aqui .

    
por atenz 04.07.2012 / 13:35
fonte