Si je lance le classique bash forkbomb :
:(){ :&:&};:
mon système s'accroche après quelques secondes.
J'ai essayé d'écrire un forkbomb en C, voici le code :
#include <unistd.h>
int main( )
{
while(1) {
fork();
}
return 0;
}
Quand je l'exécute, le système devient moins réactif, mais je peux tuer ce processus (même après plusieurs minutes) en appuyant simplement sur ^C
.
Le code ci-dessus est différent du forkbomb bash original que j'ai posté : c'est plutôt quelque chose comme :
:( )
{
while true
do
:
done
}
(Je ne l'ai pas testé, je ne sais pas si ça serait accrocher le système).
J'ai donc aussi essayé d'implémenter la version originale ; voici le code :
#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;
}
Mais toujours rien : je peux l'exécuter et ensuite le tuer facilement. Ce n'est pas suspension mon système.
Pourquoi ?
Qu'est-ce qu'il y a de si spécial dans les bash forkbombs ? Est-ce parce que bash utilise beaucoup plus de mémoire/CPU ? Parce que les processus bash appellent beaucoup plus d'appels système (par exemple, pour accéder au système de fichiers) que les miens ?