Procesos en string vs Fan de procesos usando la función fork() en C

Llamada al sistema de bifurcación : la llamada al sistema de bifurcación se utiliza para crear un nuevo proceso , que se denomina proceso secundario , que se ejecuta simultáneamente con el proceso que realiza la llamada a la bifurcación() (proceso principal). Después de que se crea un nuevo proceso secundario, ambos procesos ejecutarán la siguiente instrucción después de la llamada al sistema fork(). Un proceso hijo usa el mismo contador de programa, los mismos registros de CPU, los mismos archivos abiertos que se usan en el proceso padre.

Para crear un abanico o una string de procesos, primero inserte el archivo de encabezado «unistd.h» para usar la función fork() para crear el proceso. Para usar el método exit() , incluya «stdlib.h» y hay 3 formas en que se puede usar la declaración de salida en el programa: 

  • exit(0): Para terminación normal
  • exit(1): Para terminación anormal
  • exit(): Puede ser normal y anormal.

String de proceso :

Supongamos que hay tres procesos, y el primer proceso es el proceso principal y está creando el proceso secundario, luego este segundo proceso crea otro proceso (tercer proceso), luego el primer proceso se convierte en el principal del segundo y el segundo proceso se convierte en el padre del tercer proceso. Entonces, se obtiene una string de procesos, y eso se llama string de procesos.

Chain of process

String de 3 procesos

A continuación se muestra la implementación para crear una string de procesos usando el fork():

C

// C program to create a chain of process
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
  
// Driver Code
int main()
{
    int pid;
  
    // Iterate in the range [0, 2]
    for (int i = 0; i < 3; i++) {
        pid = fork();
  
        if (pid > 0) {
            // Print the parent process
            printf("Parent process ID is %d\n",
                   getpid());
            break;
        }
        else {
            // Print the child process
            printf("Child process ID is %d\n",
                   getpid());
        }
    }
  
    return 0;
}
Producción

Parent process ID is 1359
Child process ID is 1360
Parent process ID is 1360
Child process ID is 1360
Child process ID is 1361
Parent process ID is 1361
Child process ID is 1360
Child process ID is 1361
Child process ID is 1362

Explicación: En el programa anterior, getpid() se usa para obtener el ID del proceso. Alternativamente, también se puede usar getppid(), que obtendrá un ID de proceso principal. Cada vez que se ejecuta el programa, la salida es diferente, porque no siempre el sistema operativo asigna el mismo proceso al proceso, pero el PID (ID del proceso) siempre se obtiene en orden no decreciente cada vez que se ejecuta el programa.

Ventilador de proceso :

Supongamos que hay tres procesos, y el primer proceso es el proceso principal y está creando dos procesos secundarios. Si ambos procesos tienen el mismo padre, entonces es un abanico de procesos.

Abanico de 3 procesos

A continuación se muestra la implementación para crear un abanico de procesos usando fork():

C

// C program to create a fan of processes
  
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
  
// Driver Code
int main()
{
    // Iterate in the range [0, 2]
    for (int i = 0; i < 3; i++) {
        if (fork() == 0) {
            // getpid gives process id
            // getppid gives parent process id
            printf("child pid %d from the"
                   " parent pid %d\n",
                   getpid(), getppid());
  
            // Set Normal termination of
            // the program
            exit(0);
        }
    }
  
    for (int i = 0; i < 3; i++)
        wait(NULL);
}
Producción

child pid 29831 from parent pid 29830
child pid 29832 from parent pid 29830
child pid 29833 from parent pid 29830

Explicación: En el programa anterior, cada vez que el sistema operativo no asigna el mismo Id. de proceso cada vez. Eso significa que en este caso, también la salida es diferente cada vez que se ejecuta el programa, pero los procesos secundarios creados tendrán el mismo ID de proceso principal.

Publicación traducida automáticamente

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