Вопрос: Почему команда «: () {: |: &} ;:« заставляет мою систему отставать так сильно, что мне пришлось перезагружаться?


ОПАСНОСТЬ!

Не запускайте эту команду, чтобы «проверить» ее, если вы не готовы к сбою и / или принудительной перезагрузке вашей системы.

Я был в моем виртуальном боксе, работающем 12.04, пытаясь скомпилировать приложение, и, ожидая, я случайно оказался на форуме, где в комментарии говорилось:

Пытаться :(){ :|: & };:
  Забавно, и не нужен корень.

Не задумываясь, я запустил его в своем гном-терминале. Это сделало мой 12,04 (в Virtualbox) лаг так плохо, мне пришлось закрыть его.

Мой вопрос в том, что делает эта команда?

:(){ :|: & };:

269
2017-07-04 11:29


Источник


Связанный Как защитить Ubuntu от вилочной бомбы - Sathya
Также см. Старую ветку: ubuntuforums.org/showthread.php?t=1392511 - Paddy Landau
Связанный: Как работает вилочная бомба? а также Где вилка () на вилочной бомбе: () {: |: &};:? - terdon♦
возможный дубликат межсайтового сайта: stackoverflow.com/questions/515844/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
«отставание настолько плохо» довольно оптимистично. - pstadler


Ответы:


Это называется вилка,

:() означает, что вы определяете функцию, называемую :

{:|: &} означает выполнение функции : и отправить свой результат на : снова запустите функцию и запустите ее в фоновом режиме.

; является разделителем команд, например &&,

: запускает функцию в первый раз.

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

Запуск в Virtualbox был вполне разумным, в противном случае вам пришлось бы перезагрузить компьютер.


340
2017-07-04 11:34



Этот ответ, похоже, предполагает, что перезагрузка только регресс. Но на самом деле эту вилку можно убить без перезагрузки, и я действительно заметил, что она не работает должным образом на некоторых системах в любом случае (потому что их порог нереста настроен разумно). - Konrad Rudolph
Собственно, для полного объяснения, вероятно, следует упомянуть, что ; является разделителем команд. { ... } часть - просто содержание функции. - Michael Kjörling
@ MichaelKjörling +1 Я даже не понял синтаксис, пока не принял во внимание ваши комментарии. - jumpnett
@SuperMatt Я не знаю, является ли этот вопрос еще активным, но в любом случае я хотел знать, что | а также & делать. Я понимаю, что вы обеспечили работу функции, но я хотел знать, что делают эти двое - Noober
@Noober, если вы все еще удивляетесь (как я в этой черной дыре кратких и загадочных документов, которые являются linux), я знаю! | это труба, которую она ставит после команды для отправки этих команд в качестве входа в следующую команду. & является fork, он создает новый поток для предыдущей команды, оставляя текущий поток, чтобы продолжить выполнение большего количества команд - flurbius


Это так называемый вилка реализован в оболочке.

из Википедии:

:(){ :|:& };:
\_/| |||| ||\- ... the function ':', initiating a chain-reaction: each ':' will start    two more.
 | | |||| |\- Definition ends now, to be able to run ...
 | | |||| \- End of function-block
 | | |||\- disown the functions (make them a background process), so that the children    of a parent
 | | |||   will not be killed when the parent gets auto-killed
 | | ||\- ... another copy of the ':'-function, which has to be loaded into memory.
 | | ||   So, ':|:' simply loads two copies of the function, whenever ':' is called
 | | |\- ... and pipe its output to ...
 | | \- Load a copy of the function ':' into memory ...
 | \- Begin of function-definition
 \- Define the function ':' without any parameters '()' as follows:

157
2017-07-04 11:35



Хотя это тангенциальная точка, и термин «отключение» может быть перегружен, технически, процесс, помещенный в фоновый режим, не отменяется и всегда может быть выведен на передний план командой «fg», и процесс (ы) прекратится, если пользователь выходит из системы (если есть все еще доступные ресурсы для выхода из системы) .... если и до тех пор, пока вы не отпустите «отключение» процесса или задания. После этого это действительно отменено: выход из системы не прекращается, и fg не влияет. - Rondo
Хотя это всего лишь незначительная точка, скобки не означают, что в bash-подобных оболочках нет параметров, они являются только украшением, оставшимся от языков C-стиля. - Charlie Harding


Эта команда является хорошо известной версией вилка

fork bomb pic from wikipedia

Это приводит к тому, что ваш компьютер исчерпывает память, бесконечно обрабатывая процесс. Существуют и некоторые гарантии, которые вы можете использовать против него:

Системы типа Unix обычно имеют предел процесса, управляемый командой ulimit shell или ее преемником setrlimit. Ядра Linux устанавливают и применяют RLIMIT_NPROC rlimit («ограничение ресурсов») процесса. Если процесс пытается выполнить вилку, и пользователь, которому принадлежит этот процесс, уже владеет RLIMIT_NPROC процессов, то вилка терпит неудачу. Кроме того, в Linux или * BSD можно редактировать pam_limits файл конфигурации /etc/security/limits.conf к тому же эффекту. Однако не все дистрибутивы Linux имеют pam_limits модуль установлен по умолчанию.


70
2017-07-04 11:37





В соответствии с это  :(){ :|: & };: называется

Forkbomb это своего рода создатель поэтического вируса

... Коварная маленькая программа позволяет ей делать несколько копий   само по себе, вызывая цепную реакцию и, таким образом, быстро исчерпывая   ресурсы системы ...

Поэтому рекомендуется не запускать это, может привести к повреждению оборудования, так как он вызывает циклическое выполнение, может привести к легкому нагреву в ноутбуках.

Другая ссылка объясняет снимки экрана Вот,


18
2017-07-04 11:35



Если возникает разветвленная бомба повреждение оборудования, то у вас есть гораздо большая и более глубокая проблема. - Michael Kjörling
Может, он говорил о бомбе с вилкой, которая может взорваться возле вашего компьютера? - dysoco
Ссылка на скриншот сломана. - IMustBeSomeone