2009-02-05 13 views
34

Natknąłem się na this page i nie mogę zrozumieć, jak to działa.Komenda Bash:() {: |: & };: spowoduje procesy od zera do jądra. Czy możesz wyjaśnić składnię?

To polecenie "wykładniczo spawnuje podprocesy, dopóki twoje pudełko się nie zamknie".

Ale dlaczego? Tym, czym mniej gram, są dwukropki.

[email protected]$ :(){ :|:& };:

+0

Jestem pewien, że jest to dokładny duplikat, ale nie mogę teraz znaleźć oryginalnego pytania. – SpoonMeiser

+0

@SpoonMeiser być może to jest to ?: http://askubuntu.com/questions/159491/why-did-the-command-make-my-system-lag-so-badly-i-had-to-reboot – tox123

Odpowiedz

61

który definiuje funkcję o nazwie : który nazywa się dwukrotnie (Kod: : | :). Robi to w tle (&). Po ; definicja funkcji jest wykonywana i uruchamiana jest funkcja :.

Więc każdy przypadek: uruchamia dwa nowe: i tak dalej ... Jak binarne drzewo procesów ...

napisany w czystym C, która jest:

while(1) { 
    fork(); 
} 
+3

The Równoważnik C nie jest dokładnie taki sam (każdy proces spowoduje odrodzenie teoretycznie nieskończonej ilości siebie, podczas gdy każdy proces bash-forkbomb "tylko" odrodzi dwa procesy), chociaż oba mają taki sam wynik. – dbr

+1

dbr, tak to jest w porządku. Chociaż o tym w chwili pisania, ale ten kod C jest czystszy i prostszy. Bash jest jak drzewo binarne, C jak drzewo n-ary. –

+0

Closer C wersja: 'while (fork() == 0 || fork() == 0);' –

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

. .defines funkcji o nazwie :, która spawnuje się (dwa razy, jeden przechodzi w drugi) i same tła.

z linią przerywa:

:() 
{ 
    :|:& 
}; 
: 

Zmiana nazwy : funkcję do forkbomb:

forkbomb() 
{ 
    forkbomb | forkbomb & 
}; 
forkbomb 

można zapobiec takim atakom za pomocą ulimit ograniczyć liczbę procesów-per-user:

$ ulimit -u 50 
$ :(){ :|:& };: 
-bash: fork: Resource temporarily unavailable 
$ 

Trwale, można użyć /etc/security/limits.conf (na Debianie i innych, co najmniej), na przykład:

* hard nproc 50 

Oczywiście to oznacza, że ​​można uruchomić tylko 50 procesów, może chcesz zwiększyć w zależności od tego, co maszyna robi!

+10

Wycofane - podając: funkcja jaśniejsza nazwa jest dokładnie tym, w jaki sposób zostałbym unffuscated kod. – slim

+0

Dlaczego rurka '|'?Gra w golfa ('&&' może być używana?) Lub czy istnieje funkcja? –

+2

@CiroSantilli: '&&' sekwencyjnie uruchamia polecenia. '|' działa jednocześnie, ze standardowymi uchwytami plików przekierowanymi do potoku. –

1

Podczas próby spróbowałem różnych efektów. Zależało to (jak sądzę) od skonfigurowanego górnego limitu liczby procesów i mocy procesora, spowodowało to jedynie niewielki wstrząs w niektórych systemach i całkowite zamrożenie innych.

Powiązane problemy