Diferencia entre revisiones de «Bifurcación (sistema operativo)»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
resaltado de sintaxis
Diegusjaimes (discusión · contribs.)
m Revertidos los cambios de 95.169.226.235 a la última edición de FlaBot
Línea 11: Línea 11:
Aquí hay un ejemplo escrito en [[lenguaje de programación C]] que muestra el uso de esta llamada. El código en las secciones ''proceso hijo'' y ''proceso padre'' se ejecuta simultáneamente.
Aquí hay un ejemplo escrito en [[lenguaje de programación C]] que muestra el uso de esta llamada. El código en las secciones ''proceso hijo'' y ''proceso padre'' se ejecuta simultáneamente.


<pre><nowiki>
<source lang=C>
int pid;
int pid;


Línea 50: Línea 50:
exit(1);
exit(1);
}
}
</nowiki></pre>
</source>
Este código imprimirá:
Este código imprimirá:
<pre><nowiki>
<pre><nowiki>

Revisión del 21:16 31 ago 2009

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

En el caso concreto del sistema operativo UNIX, la llamada al sistema fork permite realizar una bifurcación de este tipo. Esta llamada devuelve el PID del proceso hijo al padre y un 0 al hijo.

Aquí hay un ejemplo escrito en lenguaje de programación C que muestra el uso de esta llamada. El código en las secciones proceso hijo y proceso padre se ejecuta simultáneamente.

   int pid;

   pid = fork();

   if(pid == 0)
   {
      /* Proceso hijo:
       * Cuando fork() devuelve 0, estamos en
       * el proceso hijo.
       * Aquí contamos hasta diez, uno cada segundo.
       */
      int j;
      for(j=0; j < 10; j++)
      {
         printf("hijo: %d\n", j);
         sleep(1);
      }
      _exit(0); /* nota: exit en lugar de _exit */
   }
   else if(pid > 0)
   { 
      /* Proceso padre:
       * Sino estamos en el proceso padre.
       * De nuevo contamos hasta diez.
       */
      int i;
      for(i=0; i < 10; i++)
      {
         printf("padre: %d\n", i);
         sleep(1);
      }
   }
   else
   {   
      /* ha ocurrido un error. */
      fprintf(stderr, "no se ha podido bifurcar");
      exit(1);
   }

Este código imprimirá:

 padre: 0
 hijo: 0
 hijo: 1
 padre: 1
 padre: 2
 hijo: 2
 hijo: 3
 padre: 3
 padre: 4
 hijo: 4
 hijo: 5
 padre: 5
 padre: 6
 hijo: 6
 hijo: 7
 padre: 7
 padre: 8
 hijo: 8
 hijo: 9
 padre: 9

El orden de la salida será determinada por diversos parámetros del núcleo del sistema operativo.