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"); }
Before Forking After Forking Before Forking After Forking
Explicación: Todas las declaraciones después de fork() se ejecutan dos veces:
- Una vez por el proceso padre.
- La segunda vez que las sentencias son ejecutadas por el proceso hijo .
Analicemos los siguientes conceptos con más detalle:
- Proceso.
- Proceso padre.
- Proceso hijo.
Proceso : Un proceso es más que el código del programa, incluye lo siguiente:
- Contador de programa.
- Pila de procesos.
- registros.
- 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:
- Nuevo
- Listo
- Correr
- Obstruido
- 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:
- Estado del proceso.
- Número de proceso.
- Contador de programa.
- Lista de archivos y registros.
- información de la CPU.
- 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