Добавить в корзинуПозвонить
Найти в Дзене

Как убить компьютер одной строчкой: Магия цифровой «клинописи»

Привет! Слушайте сюда, любители поковырять пингвина палочкой! Сегодня я расскажу вам историю о том, как превратить ваш мощный многоядерный сервер в бездыханный кирпич, не используя молоток, святую воду или гнев сисадмина. Нам понадобится всего одна строчка, которая выглядит так, будто кота стошнило на клавиатуру древними шумерскими символами. Знакомьтесь, перед вами — Fork-бомба. В узких кругах её называют «цифровым суицидом», а выглядит она вот так: : ( ) { : | : & } ; : Если вы покажете это простому смертному, он решит, что вы пытаетесь вызвать Ктулху через командную строку. Но если присмотреться, перед нами — шедевр минимализма. Это полноценная программа на языке Bash, которая умещается в 11 символов. Давайте разберем этот «иероглиф» по косточкам, пока мой внутренний демон не нажал Enter: Как только вы нажимаете клавишу ввода, начинается ядерная реакция. Одна функция создает две, две создают четыре, четыре — восемь... Через доли секунды количество процессов в вашей системе перевали
Оглавление

Привет! Слушайте сюда, любители поковырять пингвина палочкой! Сегодня я расскажу вам историю о том, как превратить ваш мощный многоядерный сервер в бездыханный кирпич, не используя молоток, святую воду или гнев сисадмина. Нам понадобится всего одна строчка, которая выглядит так, будто кота стошнило на клавиатуру древними шумерскими символами.

Знакомьтесь, перед вами — Fork-бомба. В узких кругах её называют «цифровым суицидом», а выглядит она вот так:

: ( ) { : | : & } ; :

Что это за чертовщина?

Если вы покажете это простому смертному, он решит, что вы пытаетесь вызвать Ктулху через командную строку. Но если присмотреться, перед нами — шедевр минимализма. Это полноценная программа на языке Bash, которая умещается в 11 символов.

Давайте разберем этот «иероглиф» по косточкам, пока мой внутренний демон не нажал Enter:

  1. : — Это имя функции. Автор поленился придумать название вроде «Смерть_Всему», поэтому просто поставил двоеточие. Гениально и просто, как египетская лепешка.
  2. ( ) — Означает, что мы создаем функцию. Стандартная процедура, ничего криминального... пока что.
  3. { — Начало «тела» функции. Здесь живет само зло.
  4. : | : — А вот и начинка! Функция вызывает саму себя и передает результат выполнения... самой себе. Это как если бы вы подошли к зеркалу и начали бесконечно отражаться в нем, создавая армию своих клонов.
  5. & — Эта маленькая закорючка говорит: «Делай всё это в фоновом режиме». То есть система не должна ждать, пока клон закончит работу — она просто штампует новых.
  6. } — Конец функции.
  7. ; — Разделитель.
  8. : — А это — фитиль. Мы вызываем только что созданную функцию в первый раз.

Цифровое размножение почкованием

Как только вы нажимаете клавишу ввода, начинается ядерная реакция. Одна функция создает две, две создают четыре, четыре — восемь... Через доли секунды количество процессов в вашей системе переваливает за все разумные пределы.

Ваш процессор (будь то хоть новенький Ryzen на 8 ядер, хоть дедушкин сервер) начинает лихорадочно плодить этих «паразитов». Оперативная память забивается мгновенно, планировщик задач падает в обморок, а курсор мыши замирает навсегда.

Итог: Система не может даже пискнуть. Единственный выход — старый добрый Hard Reset. Вы нажимаете кнопку питания и идете пить чай, размышляя о хрупкости бытия.

Почему это важно знать?

Исторически эта штука — отличный пример того, как логическая ошибка в коде может положить на лопатки даже самого мощного зверя. В старых Linux-системах fork-бомба была настоящим бичом. Современные дистрибутивы стали умнее (там стоят лимиты на количество процессов для одного пользователя), но проверять это на своей рабочей машине я вам категорически не советую — это как проверять остроту ножа на собственном языке.

Так что, если увидите в интернете совет «введи этот крутой код для ускорения интернета» и там есть эти двоеточия — бегите. Бегите быстрее, чем ваш процессор во время этой бомбардировки!