Práctica 3: Procesos en Unix: Señales
Continuar la codificación de un intérprete de comandos (shell) en UNIX. Nótese que los comandos aquí descritos deben interpretarse de la siguiente manera
Además deben tenerse en cuenta las siguientes indicaciones
El shell ahora permitirá instalar manejadores para señales, así como enmascararlas o ignorarlas. El shell ha de llevar un contador para cada señal en el que cuenta las veces que se ha ejecutado el manejador para dicha señal. El manejador cuando se ejecute simplememte incrementará en valor de dicho contador. Opcionalmente imprimirá el valor de dicho contador, la señal que maneja y la dirección del parámetro que recibe. Todo el manejo de señales se hará con las llamadas de System V R4: sigaction y sigprocmask
IMPORTANTE, si la función de lectura de teclado por parte del shell devuelve un error, el shell NO DEBE TERMINAR. es decir, no debe haber un código como este (sobra la llamada exit()):
if (gets(entrada,MAXENTRADA,stdin)==NULL){ perror ("imposible leer entrada"); exit(0); }
Comandos a implementar en esta práctica
Ejemplo
-> senal -install -r -f -p -d10 -mUSR1 -mHUP INT SEGVInstala, con los flags SA_NODEFER y SA_ONSTACK, un manejador para SIGINT y SIGSEGV. Dicho manejador se ejecuta con SIGUSR1 y SIGHUP enmascaradas (miembro sa_mask). El manejador cunado se ejecute, además de incrementar el contador de veces que se ha recibido la señal, envia la señal al propio proceso y luego se queda en espera 10 segundos.
#senal -info INT HUP SEGV INT Enmacarada manejador 0x30045a00 SA_RESTART SA_NODEFER mascara asociada SIGHUP SIGUSR1 HUP No enmascarada Accion por defecto SEGV No emmascarada Ignorada
Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (sigaction, sigprocmask, sigaltstack ...). Para convertir de nombre de señal a número y viceversa puede utilizarse el código disponible en
http://www.dc.fi.udc.es/~afyanez/Practicas/sources/senales.c
FORMA DE ENTREGA Como en prácticas anteriores.
FECHA DE ENTREGA VIERNES 10 DICIEMBRE DE 2010