Herramientas de usuario

Herramientas del sitio


proc_fork

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
proc_fork [2020/03/31 14:30] marianoproc_fork [2020/03/31 14:59] (actual) mariano
Línea 86: Línea 86:
 En el fork() el hijo creado obtiene una copia de todos los campos del task_struct del padre y su propio identificador. En el clone el hijo en principio dispondrá de exactamente los mismos campos del task_struct del padre y sólo realizará una copia de estos en caso de modificar alguno de ellos. Si esto ocurre debe asignarsele al hijo su propio PID. En el fork() el hijo creado obtiene una copia de todos los campos del task_struct del padre y su propio identificador. En el clone el hijo en principio dispondrá de exactamente los mismos campos del task_struct del padre y sólo realizará una copia de estos en caso de modificar alguno de ellos. Si esto ocurre debe asignarsele al hijo su propio PID.
  
 +Recomiendo leer libro: El lenguaje de programación C Brian Kernighan -  Dennis Ritchie)
 +{{ :el_lenguaje_de_programacion_c.jpg?100 |}}
  
-Recomiendo leer libro: El lenguaje de programación C Brian Kernighan -  Dennis Ritchie){{ :el_lenguaje_de_programacion_c.jpg?100|}}+==== Fork ====
  
 +Los procesos en Linux tienen una estructura jerárquica, es decir, un proceso padre puede crear un nuevo proceso hijo y así sucesivamente. La forma en que un proceso inicia a otro es mediante una llamada a fork o clone.
  
-LLamada Fork+Cuando se hace un fork, se crea un nuevo task_struct partir del task_struct del proceso padre. Al hijo se le asigna un PID propio y se le copian las variables del proceso padre. Sin embargo, vemos como en la llamada a  clone el task_struct del proceso padre se copia y se deja tal cual, por lo que el hijo tendrá el mismo PID que el proceso padre y obtendrá (físicamente) las mismas variables que el proceso padre. 
 +  
 +El proceso hijo creado es una copia del padre (mismas instrucciones, misma memoria). Lo normal es que a continuación el hijo ejecute una llamada al sistema exec (Nosotros no lo hicimos, no pasa nada o si? 8-o). En cuanto al valor devuelto por el fork, se trata de un valor numérico que depende tanto de si el fork se ha ejecutado correctamente como de si nos encontramos en el proceso padre o en el hijo. 
  
 +  * Si se produce algún error en la ejecución del fork, el valor devuelto es -1
 +  * Si no se produce ningún error y nos encontramos en el proceso hijo, el fork devuelve un 0.
 +  * Si no se produce ningún error y nos encontramos en el proceso padre, el fork devuelve el PID asignado al proceso hijo.
 +
 +A la variable **errno** 8-o ''(La variable global errno se utilizará para obtener el valor de error que se decodificará.)'' se le asigna un código de error determinado cada vez que se produce algún problema. Una llamada a fork (o clone) puede provocar dos tipos de problemas: bien se ha alcanzado el máximo número de procesos, o bien no queda suficiente memoria para crear el nuevo proceso. La siguiente tabla muestra los valores que obtiene la variable errno en función del tipo de error producido.
 +
 +^Error         ^Significado 
 +|  EAGAIN  | Se ha llegado al número máximo de procesos del usuario actual o del sistema |
 +|  EANOMEM  |El kernel no ha podido asignar suficiente memoria para crear un nuevo proceso|
 +
 +
 +----
 +
 +[[so|Volver]]
 +
 + --- //[[mariano.vargas@gmail.com|Mariano Vargas]] LOL//
 +
 +----
 +
 +~~NOCACHE~~
 +({{counter|total}})
  
× iphelper toolbox

you see this when javscript or css is not working correct

Untested
IP Address:
First usable:
Subnet:
Last usable:
CIDR:
Amount of usable:
Network address:
Reverse address:
Broadcast address:

proc_fork.1585665057.txt.gz · Última modificación: 2020/03/31 14:30 (editor externo)