Si funciono con la clásica forkbomb bash:¿Por qué las bombas C-forkbombs no funcionan como las de bash?
:(){ :&:&};:
mi sistema se bloquea después de unos segundos.
Traté de escribir una bomba fork en C, aquí está el código:
#include <unistd.h>
int main()
{
while(1) {
fork();
}
return 0;
}
Cuando lo ejecuto el sistema se vuelve menos sensible, pero puede matar a ese proceso (incluso después de minutos) sólo pulsar ^C
.
El código anterior es diferente de la fiesta de forkbomb originales que he publicado: se trata de algo más como:
:()
{
while true
do
:
done
}
(no he probado que, no sé si había hang el sistema).
Así que también intenté implementar la versión original; aquí el código:
#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;
}
Pero todavía nada: puedo ejecutarlo y luego matarlo fácilmente. No es colgando mi sistema.
¿Por qué?
¿Qué tiene de especial las bombas de tenedor bash? ¿Es porque bash usa mucha más memoria/CPU? ¿Porque los procesos de bash llaman a muchas más llamadas al sistema (por ejemplo, para acceder al sistema de archivos) que a las mías?
Como dice el refrán, los avances científicos rara vez van acompañados de "Eureka!", Comúnmente acompañados por "Hmm, eso es extraño". –