Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

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