- AVISO NÃO TENTE EXECUTAR ISTO EM UMA MÁQUINA DE PRODUÇÃO
Ao ler a página da Wikipedia sobre o tópico , geralmente sigo o que está acontecendo com o seguinte código:
:(){ :|:& };:
trecho de descrição
A seguinte bomba de garfo foi apresentada como arte em 2002;56 sua origem exata é desconhecida, mas existia na Usenet antes de 2002. A bomba é executada colando os 13 caracteres a seguir em um shell UNIX , como bash ou zsh . Ele opera definindo uma função chamada ':', que se chama duas vezes, uma vez em primeiro plano e outra em segundo plano.
No entanto, o último pedaço não está totalmente claro para mim. Eu vejo a definição da função:
:(){ ... }
Mas o que mais está acontecendo? Também fazer outras conchas tais como ksh
, csh
e tcsh
também sofrem o mesmo destino de ser capaz de construir algo semelhante?
bash
shell-script
zsh
fork
slm
fonte
fonte
Respostas:
Essa bomba de bifurcação sempre me lembra o que um professor de programação de IA disse em uma das primeiras lições que participei "Para entender a recursão, primeiro você precisa entender a recursão".
Na sua essência, esta bomba é uma função recursiva . Em essência, você cria uma função que se autodenomina, que autodenomina, que autodenomina ... até que os recursos do sistema sejam consumidos. Nesse caso específico, a recursão é amplificada pelo uso de canalizar a função para si mesma E em segundo plano.
Eu já vi isso respondido no StackOverflow , e acho que o exemplo dado aqui ilustra melhor, apenas porque é mais fácil ver o que ele faz de relance (roubado do link acima ...)
Defina a função bug
☃() { ... }
, cujo corpo se chama (função bug), canalizando a saída para si (a função bug)☃|☃
e ponha em segundo plano o resultado&
. Depois que a função for definida, chame a função bug; ☃
,.Observo que, pelo menos na minha VM do Arch, a necessidade de background do processo não é um requisito para ter o mesmo resultado final, consumir todo o espaço de processo disponível e tornar o host b0rked. Na verdade, agora eu disse que às vezes parece que encerra o processo de fuga e depois que uma tela
-bash: fork: Resource temporarily unavailable
dele para com umTerminated
(ejournalctl
mostra o bash core dumping).Para responder sua pergunta sobre csh / tcsh, nenhum desses shells suporta funções, você pode apenas usar o alias. Portanto, para esses shells, você teria que escrever um script de shell que se chama recursivamente.
O zsh parece sofrer o mesmo destino (com o mesmo código), não core dump e faz com que Arch dê
Out of memory: Kill process 216 (zsh) score 0 or sacrifice child.
, mas ainda continua a bifurcar. Depois de um tempo, ele afirmaKilled process 162 (systemd-logind) ...
(e continua a ter um zsh bifurcado).O Arch não parece ter uma
pacman
versão do ksh, então tive que experimentá-lo no debian. objetos ksh:
como um nome de função, mas usar algo - digamos,b()
parece ter o resultado desejado.fonte
Ctrl+Shift+u+<hex>
onde hex é o código hexadecimal do caractere unicode que você deseja exibir. Uma lista de unicodes visíveis pode ser encontrada em: fileformat.info/info/unicode/utf8test.htm (a maioria dos ímpares está nas seções "diversas"). O Windows deve finalizar a compra em superuser.com/questions/47420/… , e eu pessoalmente uso a ferramenta mencionada no linkunicodeinput.exe
ou recortar e colar no meu navegador. Você sempre pode usar seqüências de html, conforme sugerido pelo sambler.