Fork
Crear procesos
La llamada al sistema de fork se usa para crear un nuevo proceso, que se llama child process (proceso hijo), que se ejecuta simultáneamente con el proceso que realiza la llamada a la fork()
(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 la misma computadora (contador de programa), los mismos registros de CPU, los mismos archivos abiertos que usa el proceso padre, basicamente es un duplicado del proceso padre.
Retorno del fork
El sistema operativo utiliza una identificación única para cada proceso para realizar un seguimiento de todos los procesos. Y para eso, fork() no toma ningún parámetro y devuelve un valor int de la siguiente manera:
Case | Return value |
---|---|
Valor positivo | Si todo va bien, retorna al padre el PID del hijo |
Zero (0) | Si todo va bien returna 0 al hijo recien creado |
Valor negativo | Si la creación de un proceso hijo no tuvo éxito. |
Nota: fork() es una función basada en subprocesos, para obtener el resultado correcto, ejecute el programa en un sistema local.
Gracias esto podemos especificar a cada proceso una serie de funciones distintas. Para ello utilizaremos un if en el que si es 0 significara que es el hijo, si es mayor que cero sera el padre y sino ha habido un error.
Clasificacion de procesos
Padre, hijo, heurfano, zombie
Crear 3 procesos
Para poder crear un numero n de proecesos impares se utiliza la condicion if, expecificando que si el numero de proceso no es igual a cero, es decir si es el padre que hago un nuevo fork.
Mediante esta condicon solo hara un fork cuando sea el padre es decir, el hijo no podra crear un nuevo fork y por ello no tendremos 4 procesos distintos.
Ejemplos
Pasemos a la sección práctica donde crearemos ejemplos desde el nivel simple hasta el avanzado.
Ejemplo 1
El resultado sera:
Donde uno de los resultados proviene del proceso principal y el otro del proceso secundario.
Simplemente, podemos decir que el resultado es 2^n, donde n es el número de llamadas al sistema fork().
Como resultado, imprimirá solo un “¡Hola mundo!”.
Ejemplo 2
El resultado es:
El número de veces que se imprime 'Hello world' es igual al número de procesos creados. Número total de procesos = 2n, donde n es el número de llamadas al sistema de bifurcación. Así que aquí n = 3, 2^3 = 8
Pongamos algunos nombres de etiquetas para las tres líneas:
Ejemplo 3
Dibujé un breve boceto para ayudarte a entender la idea:
Dentro de la primera condición si se ha producido una bifurcación y está comprobando si es el proceso secundario, luego continúa ejecutando su código. De lo contrario (si es el proceso principal) no pasará por eso si. Luego, en el segundo if, solo aceptará el proceso principal que tenga la identificación positiva.
Como resultado, imprimirá solo un “¡Hola mundo!”.
Ejemplo Avanzado
El resltado es el siguiente:
Bibliografia
Last updated