Qual é a história por trás da bomba do garfo?

6

Eu li as outras perguntas sobre sua funcionalidade - que garfo bombas operam consumindo tempo de CPU no processo de bifurcação e saturando a tabela de processos do sistema operacional.

Uma implementação básica de uma fork é um loop infinito que lança repetidamente os mesmos processos.

Mas eu realmente quero saber: qual é a história desse comando? por que esse :(){ :|:& };: e não outro?

    
por Kasrâmvd 11.09.2014 / 14:51

1 resposta

13

Não é algo novo. Ela remonta a 1970, quando foi introduzido.

Citações de aqui ,

One of the earliest accounts of a fork bomb was at the University of Washington on a Burroughs 5500 in 1969. It is described as a "hack" named RABBITS that would make two copies of itself when it was run, and these two would generate two more copies each, and the copies would continue making more copies until memory was full, causing a system crash. Q The Misanthrope wrote a Rabbit-like program using BASIC in 1972 while in grade 7. Jerry Leichter of Yale University describes hearing of programs similar to rabbits or fork bombs at his Alma Mater of Princeton and says given his graduation date, they must be from 1973 or earlier. An account dating to 1974 describes a program actually named "rabbit" running on an IBM 360 system at a large firm and a young employee who was discharged for running it.

Portanto, o :(){ :|:& };: é apenas uma maneira de implementar a fork fork no shell. Se você pegar alguma outra linguagem de programação, poderá implementar também nesses idiomas. Por exemplo, em python você poderia implementar a fork fork como,

 import os
 while True: 
 os.fork()

Mais formas de implementar a fork fork em diferentes idiomas podem ser encontradas no link wikipedia .

Se você quiser entender a sintaxe, é bem simples. Uma função normal no shell seria semelhante,

foo(){
 arg1=$1
 arg2=$2
 echo 'Bar..'
 #do_something on $arg argument
}

fork() bomb é definido da seguinte forma:

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

:|: - Em seguida, ele se chama usando a técnica de programação chamada recursão e canaliza a saída para outra chamada da função : . A pior parte é a função chamada duas vezes para bombardear o seu sistema.

& - Coloca a chamada de função em segundo plano para que a criança não morra e comece a comer os recursos do sistema.

; - Finaliza a definição da função

: - Chame (execute) a função aka set a bomba fork ().

Aqui está mais um código legível por humanos:

bomb() {
 bomb | bomb &
}; bomb

Referências

link

    
por 11.09.2014 / 15:04