Ця вилка бомба завжди нагадує мені те, що сказав вчитель програмування AI на одному з перших уроків, які я відвідував, "Щоб зрозуміти рекурсію, спочатку ти повинен зрозуміти рекурсію".
По суті, ця бомба є рекурсивною функцією. По суті, ви створюєте функцію, яка викликає себе, яка викликає себе, яка викликає себе ...., поки системні ресурси не будуть витрачені. У цьому конкретному випадку рекурсія посилюється за рахунок використання функції трубопроводу до себе І підключення до неї.
Я бачив цю відповідь на StackOverflow , і я думаю, що наведений там приклад ілюструє це найкраще, просто тому, що простіше зрозуміти, що це робиться з першого погляду (викрадено за посиланням вище ...)
☃(){ ☃|☃& };☃
Визначте функцію помилки ☃() { ... }
, тіло якої викликає себе (функція помилки), передаючи висновок до себе (функція помилки) ☃|☃
та фоновий результат &
. Потім, після того , як функція визначена, на самому ділі виклик функції помилок, ; ☃
.
Зауважу, що принаймні в моєму Arch VM необхідність фонового процесу не є вимогою мати однаковий кінцевий результат, споживати весь доступний простір процесу та робити хост b0rked. Насправді зараз я казав, що, здається, іноді припиняється процес утікання, і після того, як -bash: fork: Resource temporarily unavailable
його скрипт зупиниться Terminated
(і journalctl
показує демпінг ядра bash).
Щоб відповісти на ваше запитання щодо csh / tcsh, жодна з цих функцій підтримки оболонок, ви можете лише псевдоніми. Тож для цих оболонок вам доведеться написати сценарій оболонки, який називає себе рекурсивно.
zsh, здається, спіткає таку саму долю (з тим самим кодом), не має основного дампа і змушує Arch віддавати Out of memory: Kill process 216 (zsh) score 0 or sacrifice child.
, але він все ще продовжує розщедритися. Через деякий час він констатує Killed process 162 (systemd-logind) ...
(і досі продовжує мати розгалуження zsh).
Арка, схоже, не має pacman
версії ksh, тому мені довелося спробувати її на debian. ksh об’єкти :
в якості назви функції, але використовуючи щось - скажіть, b()
замість цього, здається, бажаний результат.