Creando múltiples procesos usando fork()

Requisito previo: introducción de fork , getpid() y getppid()
Declaración del problema: escriba un programa para crear un padre con tres hijos usando la función fork() donde cada proceso encuentra su Id. Por ejemplo :

Output :parent
28808 28809 
 my id is 28807 
First child
0 28810 
my id is 28808  
Second child
28808 0 
my id is 28809  
third child
0 0 
 

Explicación: aquí, usamos la función fork() para crear cuatro procesos, uno principal y tres secundarios.

  • Un proceso existente puede crear uno nuevo llamando a la función fork().
  • El nuevo proceso creado por fork() se llama proceso hijo.
  • Estamos usando aquí getpid() para obtener la identificación del proceso
  • En fork() el proceso total creado es = 2^número de fork()

Nota: en algún momento, no es necesario que el proceso secundario se ejecute primero o que el proceso principal reciba primero la CPU asignada, a cualquier proceso se le puede asignar la CPU, en algún momento cuántico. Además, la identificación del proceso puede diferir durante diferentes ejecuciones.

Código 1 – Usogetpid()

// C++ program to demonstrate creating processes using fork()
#include <unistd.h>
#include <stdio.h>
  
int main()
{
    // Creating first child
    int n1 = fork();
  
    // Creating second child. First child
    // also executes this line and creates
    // grandchild.
    int n2 = fork();
  
    if (n1 > 0 && n2 > 0) {
        printf("parent\n");
        printf("%d %d \n", n1, n2);
        printf(" my id is %d \n", getpid());
    }
    else if (n1 == 0 && n2 > 0)
    {
        printf("First child\n");
        printf("%d %d \n", n1, n2);
        printf("my id is %d  \n", getpid());
    }
    else if (n1 > 0 && n2 == 0)
    {
        printf("Second child\n");
        printf("%d %d \n", n1, n2);
        printf("my id is %d  \n", getpid());
    }
    else {
        printf("third child\n");
        printf("%d %d \n", n1, n2);
        printf(" my id is %d \n", getpid());
    }
    return 0;
}

Producción –

parent
28808 28809 
 my id is 28807 
First child
0 28810 
my id is 28808  
Second child
28808 0 
my id is 28809  
third child
0 0 

Código 2 – Usogetppid()

// C++ program to demonstrate creating processes using fork()
#include <unistd.h>
#include <stdio.h>
  
int main()
{
    // Creating first child
    int n1 = fork();
  
    // Creating second child. First child
    // also executes this line and creates
    // grandchild.
    int n2 = fork();
  
    if (n1 > 0 && n2 > 0)
    {
        printf("parent\n");
        printf("%d %d \n", n1, n2);
        printf(" my id is %d \n", getpid());
        printf(" my parentid is %d \n", getppid());
    }
    else if (n1 == 0 && n2 > 0)
    {
        printf("First child\n");
        printf("%d %d \n", n1, n2);
        printf("my id is %d  \n", getpid());
        printf(" my parentid is %d \n", getppid());
    }
    else if (n1 > 0 && n2 == 0)
    {
        printf("second child\n");
        printf("%d %d \n", n1, n2);
        printf("my id is %d  \n", getpid());
        printf(" my parentid is %d \n", getppid());
    }
    else {
        printf("third child\n");
        printf("%d %d \n", n1, n2);
        printf(" my id is %d \n", getpid());
        printf(" my parentid is %d \n", getppid());
    }
  
    return 0;
}

Producción –

parent
5219 5220 
 my id is 5217 
 my parentid is 5215 
First child
0 5221 
my id is 5219  
 my parentid is 1 
second child
5219 0 
my id is 5220  
my parentid is 1 
third child
0 0 
 my id is 5221 
 my parentid is 1 

Este artículo es una contribución de Pushpanjali Chauhan . 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 *