- Familiarizarse con las diferentes estructuras y funciones relacionadas con el manejo de procesos en linux.
- Codificar programas que hagan uso del API de procesos.
Realizar los siguientes ejercicios:
- Escriba un programa que llame un
fork()
. Antes del llamado delfork()
, declare una variable de acceso (por ejemplo,x
) y asígnele un valor (por ejemplo,100
). Responda las siguientes preguntas:
- ¿Cuál es el valor de la variable en el proceso hijo?
- ¿Qué sucede con la variable cuando el proceso hijo y el padre cambian el valor de
x
?
- Escriba un programa que abra un archivo (con la llamada
open()
) y entonces llame afork()
. Nota: El siguiente enlace puede ser de utilidad para entender la llamadaopen()
.
- ¿Pueden el padre y el hijo acceder al file descriptor retornado por
open()
? - ¿Qué pasa si ellos empiezan a escribir el archivo de manera concurrente, es decir, a la misma vez?
- Escriba un programa usando
fork()
. El proceso hijo imprimirá"Hello"
; el proceso padre imprimirá"goodbye"
. Usted deberá asegurar que el proceso hijo imprima en primer lugar; ¿usted podría hacer esto sin llamarwait()
en el padre? - Escriba un programa que llame
fork()
y entonces llame alguna forma deexec()
para correr el programa/bin/ls
. Intente probar todas las variaciones de la familia de funcionesexec()
incluyendo (en linux)execl()
,execle()
,execlp()
,execv()
,execvp()
yexecvpe()
. ¿Por qué piensa usted que existen tantas variaciones para la misma llamada básica? - Escriba ahora un programa que use
wait()
para esperar que el proceso hijo finalice su ejecución. ¿Cuál es el valor de retorno de la funciónwait()
?, ¿Qué pasa si usted usa la funciónwait
en el hijo? - Haga un programa, como el del ejercicio anterior, con una breve modificación, la cual consiste en usar
waitpid()
en lugar dewait()
. ¿Cuándo podría serwaitpid()
útil? - Escriba un programa que cree un proceso hijo y entonces en el proceso hijo cierre la salida estandar (
STDOUT FILENO
). ¿Qué pasa si el hijo llamaprintf()
para imprimir alguna salida después de cerrar el descriptor? - Escriba un programa que cree dos hijos y conecte la salida estándar de un hijo a la entrada estándar del otro usando la llamada a sistema
pipe()
Los entregables para esta practica incluiran:
- Codigo de los ejercicos propuestos.
- Solución a las preguntas planteadas. apoyar la explicación con graficas donde lo vea necesario.