En Linux hay dos funciones para la creación de procesos: fork() y clone(). Las dos crean un nuevo proceso a partir del proceso padre pero de una manera distinta.
Cuando utilizamos la llamada al sistema fork, el proceso hijo creado es una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero. Es importante destacar que las variables del proceso hijo son una copia de las del padre (no se refieren físicamente a la misma variable), por lo que modificar una variable en uno de los procesos no se refleja en el otro.
La llamada al sistema clone () es mucho mas genérica y flexible que el fork, ya que nos permite definir qué van a compartir los procesos padre e hijo.
Las llamadas al sistema fork y clone tienen la misma funcionalidad, pero distintas características:
fork: En el momento de la llamada a fork el proceso hijo:
Cuando utilizamos la llamada al sistema fork, el proceso hijo creado es una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero. Es importante destacar que las variables del proceso hijo son una copia de las del padre (no se refieren físicamente a la misma variable), por lo que modificar una variable en uno de los procesos no se refleja en el otro.
La llamada al sistema clone () es mucho mas genérica y flexible que el fork, ya que nos permite definir qué van a compartir los procesos padre e hijo.
Las llamadas al sistema fork y clone tienen la misma funcionalidad, pero distintas características:
fork: En el momento de la llamada a fork el proceso hijo:
- Es una copia exacta del padre excepto el PID.
- Tiene las mismas variables y ficheros abiertos.
- Las variables son independientes (padre e hijo tienen distintas memorias).
- Los ficheros son compartidos (heredan el descriptor).
clone: permite especificar qué queremos que compartan padre e hijo.
- Espacio de direccionamiento
- Información de control del sistema de archivos (file system)
- Descriptores de archivos abiertos.
- Gestores de señales o PID.
Antes de hacer la llamada a fork se encuentra el proceso padre en ejecución. Tras la llamada a fork, según el valor de retorno se tiene que:
- Menor que cero: Se produjo un error. El proceso original sigue en ejecución.
- 0: Correspondiente al proceso hijo.
- Mayor que cero: Correspondiente al proceso padre.
La estructura general para crear un proceso hijo (Hilo) es la siguiente:
pid_t child;
child = fork();
if (child < 0) {
/* Manejar aquí los errores */
}
else if (child == 0) {
/* Código del proceso hijo */
}
else {
/* Código para el proceso padre */
}
__________________
Fuente: http://www.microsoft.com/technet/default.asp
Fuente: http://tecnicoslinux.com.ar/web/files/procesos.pdf
No hay comentarios:
Publicar un comentario