Práctica 2: Procesos en UNIX. Señales.
Añadir al shell de la práctica anterior las siguientes funciones de manejo de las señales.
#manejador -v INT HUP SEGV #manejador -t ILL #manejador -t -v USR1 USR2
#manejador2 -p -v -f INT HUP SEGV #manejador2 -f ILL #manejador -p -v USR1 USR2
#senales INT SIGINT enmascarada manejador SI (0x12450) flags SA_RESETHAND #senales SIGHUP no enmascarada manejador NO (SIG_DFL) flags SIGINT enmascarada manejador SI (0x12450) flags SA_RESETHAND .......
Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (sigaction, sigprocmask, str2sig, sigaltstack...)
Los manejadores deben instalarse con sigaction y la señales enmascararse y desenmascararse con sigprocmask. SEN1, SEN2 .. representa el nombre de una señal sin el SIG (ejemplo: INT, SEGV, HUP), es decir tal como lo hacen las funciones sig2str y str2sig. El estado de las señales debe obtenerse con sigaction y sigprocmask, ya que almacenarlo en variables del programa podría hacer que tras una llamada a fork() o exec no fuese correcto.
Debe tenerse en cuenta que las señales interrumpen las llamadas al sistema (muy notorio en las funciones que leen de teclado) haciendo que devuelvan -1 con errno=EINTR y sin realizar la tarea para la que fueron invocadas. Es necesario por tanto, que en el caso de que una llamada al sistema sea interrumpida por una señal la reiniciemos, bien directamente después de comprobar que ha sido interrumpida o bien indicándole al sistema que lo haga automáticamente (por medio de sigaction).
En Solaris pueden usarse las utilidades de /usr/proc/bin para comprobar la veracidad de lo reportado por el programa.
FORMA DE ENTREGA
Como en las prácticas anteriores.
FECHA DE ENTREGA VIERNES 13 ENERO 2006