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.
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; }
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.
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); }
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.