Bifurcación (sistema operativo)
- Este artículo se refiere a la bifurcación de procesos en sistemas operativos, consulta Bifurcación (informática) para otros usos.
Una bifurcación o fork, cuando se aplica en el contexto de un lenguaje de programación o un sistema operativo, hace referencia a la creación de una copia de sí mismo por parte de un programa, que entonces actúa como un "proceso hijo" del proceso originario, ahora llamado "padre". Los procesos resultantes son idénticos, salvo que tienen distinto número de proceso (PID).
Más generalmente, una bifurcación en un entorno multihilo significa que un hilo de ejecución se bifurca.
UNIX
[editar]En el caso de los sistemas operativos derivados de UNIX, la llamada al sistema fork permite realizar una bifurcación del proceso. Esta llamada devuelve el identificador de proceso del proceso hijo al padre y un 0 al proceso hijo.
Aquí hay un ejemplo escrito en lenguaje de programación C que muestra el uso de esta llamada. El código que se ejecute depende de si el proceso es padre o hijo.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void) {
pid_t idHijo;
pid_t idPropio;
idPropio = getpid(); //Se obtiene el id del proceso actual
idHijo = fork(); //Se crea un proceso 'hijo'
if (idHijo == -1) { //Si hay un código menor que cero, hubo un error
printf("Error al realizar la bifurcación"); //Se notifica al usuario
return 1; //Se interrumpe la ejecución del proceso con una salida distinta a cero
}
if (idHijo == 0) //la ejecución de la llamada al sistema fork devuelve un cero al proceso 'hijo'
printf("Soy el hijo con id %ld id proceso original %ld\n", (long)getpid(), (long)idPropio);
else //la ejecución de la llamada al sistema fork devuelve el identificador al proceso 'padre'
printf("Soy el padre con id %ld id proceso original %ld\n", (long)getpid(), (long)idPropio);
return 0;
}
Este código imprimirá:
Soy el padre con id 1 id proceso original 1 Soy el hijo con id 2 id proceso original 1
El orden de la salida será determinada por diversos parámetros del núcleo del sistema operativo. Como se puede observar, el valor contenido en la variable idPropio es compartido por proceso padre e hijo; sin embargo, la referencia a la variable no es la misma y su posterior modificación en cada código, ya sea del padre o del hijo, no se verá reflejada en ambos procesos.