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/03 23:55] – [Pipes] 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 a del [[http:// | + | Resuelva la pregunta 1 partes |
| ==== Cambiar el archivo ejecutable ==== | ==== Cambiar el archivo ejecutable ==== | ||
procesos.1438646144.txt.gz · Última modificación: por lmateu
