fork() para ejecutar procesos de abajo hacia arriba usando wait()

La llamada al sistema fork() se usa para crear un proceso generalmente conocido como proceso secundario y el proceso que lo creó se conoce como proceso principal. Ahora, todos los procesos que se crean usando fork() se ejecutan simultáneamente. Pero, ¿qué sucede si queremos que el último proceso creado se ejecute primero y, de esta manera, la ejecución de abajo hacia arriba de tal manera que el proceso principal se ejecute en último lugar?

Esto se puede hacer usando la llamada al sistema wait() . El proceso principal puede entonces emitir una llamada al sistema wait(), que suspende la ejecución del proceso principal mientras el secundario se ejecuta y cuando el secundario finaliza la ejecución, devuelve el estado de salida al sistema operativo. Ahora espere() suspenda el proceso hasta que cualquiera de sus procesos secundarios finalice la ejecución.

NOTA : Esta es una llamada al sistema Linux, por lo que debe ejecutarse en un sistema Linux o variante Unix.

// Program to demonstrate bottom to up execution
// of processes using fork() and wait()
#include <iostream>
#include <sys/wait.h> // for wait()
#include <unistd.h> // for fork()
int main()
{
    // creating 4 process using 2 fork calls
    // 1 parent : 2 child : 1 grand-child
    pid_t id1 = fork();
    pid_t id2 = fork();
  
    // parent process
    if (id1 > 0 && id2 > 0) {
        wait(NULL);
        wait(NULL);
        cout << "Parent Terminated" << endl;
    }
  
    // 1st child
    else if (id1 == 0 && id2 > 0) {
  
        // sleep the process for 2 seconds
        // to ensure 2nd child executes first
        sleep(2);
        wait(NULL);
        cout << "1st child Terminated" << endl;
    }
  
    // second child
    else if (id1 > 0 && id2 == 0) {
        // sleep the process for 1 second
        sleep(1);
        cout << "2nd Child Terminated" << endl;
    }
  
    // grand child
    else {
        cout << "Grand Child Terminated" << endl;
    }
  
    return 0;
}

Producción:

Grand Child Terminated
2nd Child Terminated
1st child Terminated
Parent Terminated

Publicación traducida automáticamente

Artículo escrito por shubham_rana_77 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 *