Nowe posty

Autor Wątek: Co właściwie robi ta komenda?  (Przeczytany 5478 razy)

  • Gość
Co właściwie robi ta komenda?
« dnia: 2007-12-16, 22:10:19 »
Na wykładzie z Unixa profesor podał nam następującą komendę:

:(){ :|:&};:

która po wprowadzeniu całkowicie zawiesza interpretator poleceń i przy okazji cały system. Moje pytanie brzmi: co właściwie robi/wywołuje ta komenda?

arctgx

  • Gość
Co właściwie robi ta komenda?
« Odpowiedź #1 dnia: 2007-12-16, 22:59:47 »
Napisałem już kilka linijek próby wyjaśnienia, ale... może to właśnie zadanie dla Ciebie, by do tego samodzielnie dojść :) A nie chciałbym robić za Ciebie zadanka domowego.

Koniecznie przestudiuj manual basha - jest po polsku. Być może polecenie działa w innych powłokach.

Podobno na taki rozrost pamięci można nałożyć ograniczenie w systemie, ale jak - nie pamiętam już.

arctgx

  • Gość
Co właściwie robi ta komenda?
« Odpowiedź #2 dnia: 2007-12-16, 23:13:46 »
Mnie dziwi tylko że można definiować funkcję, której nazwa zarezerwowana jest już dla pewnego wbudowanego polecenia.

  • Gość
Co właściwie robi ta komenda?
« Odpowiedź #3 dnia: 2007-12-17, 00:32:50 »
Komenda została nam podana ot tak, dla zabawy na zakończenie wykładu (wykładowca stwierdził, że znalazł ją sobie w Internecie). Efekt interesujący, ale ja próbuję dociec sposobu działania.

Na razie doszedłem do takiego wniosku, nie wiem czy słusznego:

Od razu widać, że jest to funkcja o nazwie w postaci dwukropka ":". Wg. mnie wywołuje rekurencyjnie samą siebie w nieskończoność (a być może jednocześnie dwa razy się wywołuje, jeśli zawartość listy można potraktować jako potok). Ampersand oczywiście uruchamia procesy w tle.

Tak więc mamy najpierw 1 proces, potem 2, 4, 16, 32, 64.... aż do zapchania pamięci. Dobrze kombinuję?

chmooreck

  • Gość
Co właściwie robi ta komenda?
« Odpowiedź #4 dnia: 2007-12-17, 07:52:07 »
Dobrze...

...poza tym, że wypisujesz ile masz uruchomionych procesów, a tego nie jesteś w stanie przewidzieć (było: stwierdzić).

difrost

  • Gość
Co właściwie robi ta komenda?
« Odpowiedź #5 dnia: 2007-12-19, 16:08:57 »
Twój wykładowca pewnie wziął to ze starego wątku na LKML o magicznej nazwie (która wyjaśnia całe zagadnienie): forkbombing.

W ramach konkluzji to podanego wątku, ja stale uważam, że powinno zostać to rozwiązane mechanizmem in-kernel, jak w BSD.