Fork-бомба на Mac?

Так как Вы упоминаете, что использовали / для поиска я предположу, что Вы используете ключи vi-режима. Значение по умолчанию vi-edit ключевая таблица не связывает C-u (это связывается с delete-line в emacs-edit ключевая таблица).

Можно связать его вручную (например, в Вашем .tmux.conf, или после <префикса>:):

bind-key -t vi-edit C-u delete-line
8
23.04.2012, 21:41
4 ответа

Как работает fork-бомба: в C (или подобный C) код, называют функцию fork() назван. Это заставляет Linux или Unix или Unix-likes создавать совершенно новый процесс. Этот процесс имеет адресное пространство, идентификатор процесса, маску сигнала, открытые дескрипторы файлов, весь способ вещей, которые занимают место в несколько ограниченной памяти ядра ОС. Недавно созданный процесс также заставляет место в структуре данных ядра для процессов работать. К процессу, который звонил fork(), похоже, что ничего не произошло. Процесс fork-бомбы попытается звонить fork() с такой скоростью, как это может, так много раз, как это может.

Прием - то, что недавно созданный процесс также возвращается из fork() в том же коде. После ветвления у Вас есть два процесса, выполняющие тот же код. Каждый новый процесс fork-бомбы пытается звонить fork() с такой скоростью, как это может, так много раз, как это может. Код, который Вы дали как пример, является версией сценария Bash fork-бомбы.

Скоро, связанные с процессом ресурсы ядра всей ОС привыкают. Таблица процессов полна. Список ожидания-к-управляемому процессов является полным. Реальная память полна, таким образом, подкачка страниц запускается. Если это продолжается достаточно долго, раздел подкачки заполняется.

На что это похоже пользователю: все работает супер медленно. Вы добираетесь, сообщения об ошибках как "не могли создать процесс" при попытке простых вещей как ls. Попытка a ps вызывает бесконечную паузу (если она работает вообще), и отдает очень длинный список процессов. Иногда эта ситуация требует перезагрузки через шнур питания.

Fork-бомбы раньше назывались "кроликами" назад в былые времена. Поскольку они воспроизвели так быстро.

Только для забавы, я записал программу fork-бомбы в C:

#include <stdio.h>
#include <unistd.h>
int
main(int ac, char **av)
{
        while (1)
                fork();

        return 0;
}

Я скомпилировал и запустил ту программу под Дугой Linux в одном xterm. Я другой xterm я пытался получить список процессов:

1004 % ps -fu bediger
zsh: fork failed: resource temporarily unavailable

Оболочка Z в 2-м xterm не могла звонить fork() успешно, поскольку процессы fork-бомбы, связанные с 1-м xterm, израсходовали все ресурсы ядра, связанные с созданным процессом и выполнение.

3
27.01.2020, 20:12

Существует много гарантий, которые могут быть помещены на месте, чтобы препятствовать тому, чтобы fork-бомба работала.

Самое простое:

ulimit -u 1024

ограничение количества пользовательских процессов к 1 024.

До обхождения системных гарантий существуют, конечно, способы, которыми можно найти выполнения этого, но я не думаю, что любой здесь даст Вам способ сделать это, но в основном Ваша система исчерпывает PIDs и не может больше порождать процессы и в основном стачивается к полному останову, учитывая, что Ваша бомба берет 100% ЦП, пытающегося порождать больше из себя.

3
27.01.2020, 20:12
  • 1
    были вокруг подобного навсегда. Это - действительно очень простая защита от fork-бомб, но безусловно большинство дистрибутивов Linux не реализует ее. Не уверенный, почему, но я думаю, что это имеет некоторое отношение к ограничению процессов доверяемого пользователя также. –  jippie 23.04.2012, 22:33
  • 2
    @jippie, поскольку лучше сделать это другим способом как rlimit –  Karlson 23.04.2012, 23:21
  • 3
    Тем не менее я думаю, что это - глупое значение по умолчанию, что большинство дистрибутивов позволяет fork-бомбу от непривилегированных пользователей к DoS машина. –  jippie 23.04.2012, 23:56
  • 4
    @jippie, который философия позади большинства дистрибутивов Unix - то, что они выполняются "умными" людьми. Таким образом, по умолчанию этим "умным" людям разрешают сделать, почти что-либо и администраторы запретят для создания системы более безопасной... Я оставлю заключение воображению читателя. И рассматриваемый файл /etc/security/limits.conf –  Karlson 24.04.2012, 00:00
  • 5
    Ограничение количества процессов не всегда достаточно: постоянный спрос на разветвление перегрузок некоторые планировщики (планировщик это не записано с предотвращением fork-бомбы в памяти, мог бы потратить свое ветвление отклонения времени на ветвление и почти никогда не находить время для планирования полезных процессов). –  Gilles 'SO- stop being evil' 24.04.2012, 02:30
  • 6
    Ограничение количества процессов не всегда достаточно: постоянный спрос на разветвление перегрузок некоторые планировщики (планировщик это не записано с предотвращением fork-бомбы в памяти, мог бы потратить свое ветвление отклонения времени на ветвление и почти никогда не находить время для планирования полезных процессов). –  Gilles 'SO- stop being evil' 24.04.2012, 02:30

Если Вы ДЕЙСТВИТЕЛЬНО отчаянно пытаетесь видеть, как fork-бомба работает, попытайтесь выполнить ее как корень, например. sudo :(){ :|:& };:, но снова, быть предупрежденным. Попробованный это самостоятельно на Ubuntu. Система ЗАМОРОЗИТСЯ!

Простое рассечение для Вас:

:() { #Define a new shell function
  :|:& #Pipe function named ':' through itself, creating two copies of itself, and make them run in the background
} #End of function definition block
;: #Call the ':' function. Note how the function is defined with two calls to itself piped through each other. This starts a chain reaction: those two copies will in turn create two more, and so on, as infinitum

Знайте об этом при попытке причинить такой вред...

2
27.01.2020, 20:12
  • 1
    Этот сценарий будет работать, как для Linux, но на MAC удаляют''; на последней строке. –  HashHazard 05.09.2014, 22:57
  • 2
    Вы не можете использовать sudo как этот –  that other guy 08.07.2017, 00:38
  • 3
    это является просто временным и уходит на праве перезагрузки? положительная сторона –  Winnemucca 10.11.2017, 22:59
  • 4
    @Winnemucca Хорошо однажды RAM и ЦП перегружается, система замораживается, просто перезагрузка и Ваша машина будут обычно запускаться, если Вы не установите его как сценарий запуска. Это не очень умная мысль все же. –  Manchineel 20.12.2017, 19:30
  • 5
    я был бы просто sudo su root затем выполните fork-бомбу на самом деле как пользователя root. –  sudo 12.03.2018, 22:56

Вы можете сделать это, но убедитесь, что файл называется file.py

import os 
while True
  os.startfile(file.py)

Затем запустите:

python file.py
0
27.01.2020, 20:12

Теги

Похожие вопросы