procesos
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
procesos [2015/08/04 00:06] – [Ejercicio] lmateu | procesos [2018/07/12 14:00] (actual) – [Procesos] lmateu | ||
---|---|---|---|
Línea 8: | Línea 8: | ||
* En el padre, fork retorna el pid del hijo. | * En el padre, fork retorna el pid del hijo. | ||
* Para el hijo se crea un nuevo espacio de direcciones de memoria que parte inicialmente con una copia de toda la memoria del padre. | * Para el hijo se crea un nuevo espacio de direcciones de memoria que parte inicialmente con una copia de toda la memoria del padre. | ||
- | * El hijo hereda | + | * El hijo hereda todos los archivos abiertos por el padre. Los fds (file descriptors) del padre siguen siendo válidos en el hijo (y también en el padre). |
* El tiempo de ejecución del proceso hijo parte de 0. | * El tiempo de ejecución del proceso hijo parte de 0. | ||
* El hijo parte sin alarmas ni señales pendientes. | * El hijo parte sin alarmas ni señales pendientes. | ||
Línea 17: | Línea 17: | ||
#include < | #include < | ||
| | ||
- | pid_t child; | + | pid_t child= fork(); |
- | if ((child= | + | if (child==0) { |
- | /* aquí se ejecuta el padre */ | + | // aquí se ejecuta el hijo |
- | | + | |
- | ... | + | |
} | } | ||
else { | else { | ||
- | /* aquí se ejecuta el hijo */ | + | // aquí se ejecuta el padre |
- | ... | + | |
+ | ... código que se ejecuta en paralelo con el cuerpo del hijo ... | ||
+ | int status; | ||
+ | waitpid(child, | ||
+ | int rc= WEXITSTATUS(status); | ||
} | } | ||
</ | </ | ||
Línea 102: | Línea 106: | ||
en donde fds es un arreglo de tamaño 2. Después de ejecutar esta llamada, se obtienen 2 fds: | en donde fds es un arreglo de tamaño 2. Después de ejecutar esta llamada, se obtienen 2 fds: | ||
- | |||
fds[0] permite leer | fds[0] permite leer | ||
Línea 155: | Línea 158: | ||
Observe que si se reemplazara la llamada de la función leer por read, podría funcionar en algunas plataformas, | Observe que si se reemplazara la llamada de la función leer por read, podría funcionar en algunas plataformas, | ||
+ | |||
+ | Cuando user fork nunca olvide: | ||
+ | - Invocar exit para terminar el hijo | ||
+ | - Invocar waitpid en el padre para enterrar al hijo | ||
+ | - Padre e hijo usan espacios de direcciones independientes así es que el padre no verá los cambios que el hijo haya hecho en la memoria. | ||
==== Ejercicio ==== | ==== Ejercicio ==== | ||
- | Resuelva la pregunta 1 parte b del [[http:// | + | Resuelva la pregunta 1 partes a y b del [[http:// |
==== Cambiar el archivo ejecutable ==== | ==== Cambiar el archivo ejecutable ==== |
procesos.1438646777.txt.gz · Última modificación: 2015/08/04 00:06 por lmateu