Clase 3
- Comunicación entre procesos: Signals
- Comunicación entre procesos: Pipes
Material
Prácticas
Signals - Práctica 1
-
Crear el archivo
loop.py. Escribir en su interior:import time while True: time.sleep(1) print("tick") -
Ejecutar el script.
python loop.pySe deberá observar en la consola los mensajes
“tick”cada un segundo. -
Ejecutar la lista de procesos activos para ver el estado del mismo y obtener el PID.
ps -elfAparecerá el proceso con una
S(Interruptable) debido a la funciónsleep(). Obtener el PID. -
Presionar
Ctrl+Zpara enviar la signalSIGSTPal proceso. -
Ejecutar la lista de procesos activos para ver el estado.
ps -elfAparecerá el proceso con una
T(stopped). -
Reanudar el proceso enviando la señal de continuar:
kill -SIGCONT pid -
Se deberá ver el
"tick"nuevamente.
Signals - Práctica 2
Escribir un programa que cree una instancia hija con fork(). El proceso padre deberá registrar el handler para SIGCHLD, y dentro del mismo ejecutar la función wait(). El proceso hijo deberá ejecutar un sleep de 5 segundos y luego terminar. Asegurarse mediante el comando ps que el proceso hijo no quede en estado zombie.
Investigar cómo reacciona el proceso padre (con y sin SA_RESTART) si recibe la señal SIGCHLD mientras está ejecutando las funciones:
read(STDIN_FILENO, ...)sleep(...)pause()
Pipes - Práctica 1
Tomar el ejercicio de la práctica 2 de signals y comunicar el proceso hijo con el padre mediante pipes. El proceso hijo deberá enviar un mensaje luego de esperar 5 segundos, luego esperará 10 segundos y terminará. El proceso padre deberá imprimir el mensaje por pantalla.
Implementar correctamente las llamadas a read y write de forma tal que los procesos reaccionen mostrando un mensaje de error apropiado en los siguientes casos:
readen el pipe cuando el hijo termina prematuramente.writeen el pipe cuando el padre termina prematuramente.