Diferencia entre proceso, proceso principal y proceso secundario

C

// C program to demonstrate
// the above concept
#include <sys/types.h>
#include<stdio.h>
#include <unistd.h> 
  
// Driver code
int main()
{
  printf ("Before Forking\n");
  fork();
  printf ("After Forking\n");
}
Producción

Before Forking
After Forking
Before Forking
After Forking

Explicación: Todas las declaraciones después de fork() se ejecutan dos veces: 

  1. Una vez por el proceso padre.
  2. La segunda vez que las sentencias son ejecutadas por el proceso hijo .

Analicemos los siguientes conceptos con más detalle:

  1. Proceso.
  2. Proceso padre.
  3. Proceso hijo.

Proceso : Un proceso es más que el código del programa, incluye lo siguiente:

  1. Contador de programa.
  2. Pila de procesos.
  3. registros.
  4. Código de programa, etc

Por el contrario, el código del programa es solo una sección de texto.

Un proceso cambia su estado a medida que se ejecuta. El nuevo estado depende parcialmente de la actividad actual de un proceso. Los diferentes estados del proceso durante su ejecución son:

  1. Nuevo
  2. Listo
  3. Correr
  4. Obstruido
  5. Terminado.

Un bloque de control de procesos y una tabla de procesos están asociados con cada uno de los procesos. Contiene la siguiente información importante sobre el proceso:

  1. Estado del proceso.
  2. Número de proceso.
  3. Contador de programa.
  4. Lista de archivos y registros.
  5. información de la CPU.
  6. Información de la memoria, etc.

Proceso principal :

Sobre el éxito de una llamada al sistema fork():

  • El ID de proceso (PID) del proceso secundario se devuelve al proceso principal.
  • 0 se devuelve al proceso hijo.

En caso de falla de una llamada al sistema fork(), 

  • -1 se devuelve al proceso padre.
  • No se crea un proceso secundario.

Proceso hijo :

    ¿Por qué necesitamos crear un proceso hijo ?

    Programa 1: La tarea aquí es mostrar cómo realizar dos trabajos diferentes pero interrelacionados simultáneamente. Por lo tanto, el código real para copiar y reproducir el archivo GIF animado se ha omitido, solo se muestra el enfoque para realizar 2 trabajos simultáneamente. 

    C

    // C program for the above approach
    #include <sys/types.h>
      
    // Driver Code
    int main( )
    {
      int pid;
      pid = fork();
      if (pid == 0)
      {
        printf ("In child process\n");
          
        /* code to play animated GIF file */
      }
      else
      {
        printf ("In parent process\n");
          
        /* code to copy file */
      }
    }
    

    Explicación: el el

    Programa 2:
    este programa usaría la llamada fork() para crear un proceso secundario. En el proceso hijo, imprimiríamos el PID del hijo y su padre, mientras que en el proceso padre imprimiríamos el PID del padre y su hijo. 

    C

    // C program to implement
    // the above approach
    # include <sys/types.h>
      
    // Driver code
    int main()
    {
      int pid;
      pid = fork();
      
      if (pid == 0)
      {
        printf ("Child : I am the child process\n");
        printf ("Child : Child’s PID: %d\n", getpid());
        printf ("Child : Parent’s PID: %d\n", getppid());
      }
      else
      {
        printf ("Parent : I am the parent process\n");
        printf ("Parent : Parent’s PID: %d\n", getpid());
        printf ("Parent : Child’s PID: %d\n", pid);
      }
    }
    

    Producción:

    Child : I am the child process
    Child : Child's PID: 4706
    Child : Parent's PID: 4705
    Parent : I am the Parent process
    Parent : Parent's PID: 4705
    Parent : Child's PID: 4706

    Publicación traducida automáticamente

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