Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Co właściwie robi ta komenda?  (Przeczytany 5722 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.