Если вы немного сломаете эту бомбу, это может иметь больше смысла.Измените это на:
#!/bin/bash
$0
Эта бомба будет порождать новую копию сценария оболочки снова и снова:
$ ps auxw | grep pts/2
sarnold 2410 0.0 0.1 24840 6340 pts/2 Ss Nov17 0:01 bash
sarnold 17280 0.0 0.0 12296 1600 pts/2 S+ 18:01 0:00 /bin/bash ./bomb.sh
sarnold 17281 0.0 0.0 12296 1600 pts/2 S+ 18:01 0:00 /bin/bash ./bomb.sh
sarnold 17282 0.0 0.0 12296 1600 pts/2 S+ 18:01 0:00 /bin/bash ./bomb.sh
sarnold 17283 0.0 0.0 12296 1596 pts/2 S+ 18:01 0:00 /bin/bash ./bomb.sh
sarnold 17284 0.0 0.0 12296 1600 pts/2 S+ 18:01 0:00 /bin/bash ./bomb.sh
...
$ ps auxw | grep pts/2 | wc -l
2077
Каждый старый по сути "мертв" - ожидаетпожинать статус выхода из казненного ребенка.Конечно, этого не произойдет до тех пор, пока один из выполненных потомков не сможет выполнить его из-за ограничений процесса.(Что, кстати, напоминает мне, что, возможно, установка nproc
rlimit была бы хорошей идеей, прежде чем играть намного дальше.)
Так что это дерево процессов выглядит так:
1
2
3
4
5
6
Если вы добавитеОт &
до конца команды вы увидите, что более старые могут в конечном итоге попасть в расписание и умереть.Новые же формируются так же быстро, поэтому это вызывает довольно значительный отток и помогает уменьшить вероятность того, что он будет просто завершаться , когда будет создано максимальное количество процессов.Дерево будет выглядеть примерно так:
1
2
3
5
6
8
Добавление строки second $0 &
приведет к тому, что дерево будет выглядеть немного иначе:
1
2 3
4 5 6 7
Кромеэто, вероятно, не будет это хорошо - второй процесс может начать третий, а не первый, начинающий третий.Вероятно, это будет выглядеть хаотично.
Каждый «слой» в целом удвоит размер предыдущего слоя, но execve(2)
можно вызывать только так часто - хитрость в том, что эта бомба вероятно вызывает гораздо больше переключений контекста процесса, чем более простые бомбы, и все эти TLB сбрасывания значительно повлияют на производительность системы.Поскольку родители будут по существу случайным образом отмирать после казни обоих детей, init(8)
будет иметь намного больше процессов, переизобретенных заново.Все это увеличит количество сигналов, отправляемых на init(8)
для очистки, что затруднит администратору вход в систему и устранение проблемы.