Если я запускаю классическую bash forkbomb:
:(){ :&:&};:
моя система зависает через несколько секунд.
Я попытался написать forkbomb в C, вот код:
#include <unistd.h>
int main( )
{
while(1) {
fork();
}
return 0;
}
Когда я запускаю его, система становится менее отзывчивой, но я могу убить этот процесс (даже после нескольких минут), просто нажимая ^C
.
Вышеприведенный код отличается от оригинальной bash forkbomb, которую я опубликовал: это нечто более похожее:
:( )
{
while true
do
:
done
}
(я не тестировал его, не знаю, повесил ли он систему).
Поэтому я также попытался реализовать исходную версию; здесь код:
#include <unistd.h>
inline void colon( const char *path )
{
pid_t pid = fork( );
if( pid == 0 ) {
execl( path, path, 0 );
}
}
int main( int argc, char **argv )
{
colon( argv[0] );
colon( argv[0] );
return 0;
}
Но все равно ничего: я могу запустить его, а затем легко его убить. Это не висит моя система.
Почему?
Что такого особенного в bash forkbombs? Это потому, что bash использует намного больше памяти/процессора? Поскольку процессы bash обрабатывают гораздо больше системных вызовов (например, для доступа к файловой системе), чем мой?