Fork() – Preguntas de práctica

Requisito previo: conceptos básicos de bifurcación , bifurcación y árbol binario ,

Ejemplo 1:
¿Cuál es el resultado del siguiente código?

#include <stdio.h>
#include <unistd.h>
int main()
{
    if (fork() || fork())
        fork();
    printf("1 ");
    return 0;
}

Producción:

 1 1 1 1 1 

fork1

Explicación:
1. Creará dos procesos, uno padre P (tiene ID de proceso de proceso secundario) y otro es hijo C1 (ID de proceso = 0).
2. En la declaración if usamos el operador OR ( || ) y en este caso la segunda condición se evalúa cuando la primera condición es falsa.
3. El proceso principal P devolverá un entero positivo, por lo que ejecutará directamente la declaración y creará dos procesos más (uno principal P y otro secundario C2). El proceso secundario C1 devolverá 0, por lo que verifica la segunda condición y la segunda condición nuevamente crea dos procesos más (uno principal C1 y otro es secundario C3).
4. C1 devuelve un entero positivo, por lo que creará dos procesos más (uno principal C1 y otro secundario C4). Child C3 devuelve 0 por lo que imprimirá directamente 1.

Ejemplo 2:
¿Cuál es el resultado del siguiente código?

#include <stdio.h>
#include <unistd.h>
  
int main()
{
    if (fork()) {
        if (!fork()) {
            fork();
            printf("1 ");
        }
        else {
            printf("2 ");
        }
    }
    else {
        printf("3 ");
    }
    printf("4 ");
    return 0;
}

Producción:

 2 4 1 4 1 4 3 4 

fork2
Explanation:
1. It will create two process one parent P (has process ID of child process) and other is child C1 (process ID = 0).
2. When condition is true parent P executes if statement and child C1 executes else statement and print 3. Parent P checks next if statement and create two process (one parent P and child C2). In if statement we are using not operator (i.e, !), it executes for child process C2 and parent P executes else part and print value 2. Child C2
further creates two new processes (one parent C2 and other is child C3).

Ejemplo 3:
¿Cuál es el resultado del siguiente código?

#include <stdio.h>
#include <unistd.h>
  
int main()
{
    if (fork() && (!fork())) {
        if (fork() || fork()) {
            fork();
        }
    }
    printf("2 ");
    return 0;
}

Producción:

 2 2 2 2 2 2 2 

fork3
Explanation:
1. Fork will create two process one parent P (has process id of new child) and other one is child C1 (process id=0).
2. In if statement we are using AND operator (i.e, &&) and in this case if first condition is false then it will not evaluate second condition and print 2. Parent process P check for second condition and create two new processes (one parent P and other is child C2). In second condition we are using NOT operator which return true for child process C2 and it executes inner if statement.
3. Child C2 again create two new processes (one parent C2 and child C3) and we are using OR operator (i.e, ||) which evaluate second condition when first condition is false. Parent C2 execute if part and create two new processes (one parent C2 and child C4) whereas child C3 check for second condition and create two new processes (one parent C3 and child C5).
4. Parent C3 enters in if part and further create two new processes (one parent C3 and child C6).

Publicación traducida automáticamente

Artículo escrito por shivani.mittal 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 *