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