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.

pid_t fork(void);

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