SISTEMAS OPERATIVOS II

Tercer curso Ingeniería Técnica Informática de sistemas. Curso 2006-2007

Práctica 4: Procesos en UNIX: Credenciales, señales

Continuar la codificación de un intérprete de comandos (shell) en UNIX. Al igual que en la práctica anterior

En esta práctica el shell, ademas se incorporarán las funciones para comprobar el funcionamiento de los manejadores de seña les y de las credenciales. Todo el manejo de señales se hara con la interface de System V R4 (sigaction, sigprocmask ...). Los nombres de la señales se especificarán sin el SIG.

seninfo [S1] [S2] ...
No da información del estado de cada señal: manejada (con la dirección del menjador, los flags y la máscara asociada), ignorada o acción por defecto, asi como de si está enmascarada o no. Ejemplo
#seninfo INT HUP SEGV
INT Enmacarada manejador 0x30045a00 SA_RESTART SA_NODEFER. mascara asociada SIGUP SIGUSR1 
HUP No enmascarada Accion por defecto 
SEGV No emmascarada Ignorada

contador [-r] [S1] [S2] ...
Nos informa de los contadores de la señales S1 S2 ..., con -r resetea los contadores de dichas sñales. Si no se especifican señales lo hace para todas (tanto mostrar los contadores como resetearlos en su caso)

pila [tam]
Estable ce una pila alternativa para la ejecición de las señales de tamaño. Si no se especifica tamaño nos informa del tamaño de la pila alternativa y de su dirección tam.

maxmanejador [n ]
Establece el número máximo de veces que un manejador se reenvía la señal. Si no se especifica n nos indoca a cuanto está establecido dicho valor. Un valor 0 indica que no ha límite predefinido

 $$
manejador [-v] [-r] [-p] [-t] [-f] [-dN] [-mSEN1] [-mSEN2] ...SIG [SIG2] .... Instala un manejador para las señales SIG1, (SIG2 ...). El manejador incrementará un contador que indica cuantas veces se ha ejecutado. Además se admitirán las siguientes opciones
-mSEN
El manejador se ejecuta con la señal SEN enmascarada (miempro sa_mask de la estructura sigaction
-dN
El manejador se queda en espera N segundos (con la llamada sleep). De esta presente debe ser la última instrucción dentro del manejador
-v
El manejador al ejecutarse debe imprimir en pantalla la señal que se ha recibido, cuantas veces se ha ejecutado así como la dirección del parámetro que recibe. De no indicarse -v el manejador NO DEBE IMPRIMIR NADA en pantalla.
-r
El manejador reenvía al proceso la señal para la cual es manejador. En caso de reenviarse la señal, debe hacerse despues de imprimir en pantalla (en caso de que se imprima) y antes de quedarse en espera (en caso de que se haya especificado -sN)
-t
El manejador se instala con el flag SA_RESETHAND
-p
El manejador se ejecutará en la pila alternativa (se instal con el flag SA_ONSTACK
-f
El manejador se instal con el flag SA_NODEFER

enmascarar [-n] [S1] [S2] ...
Enmascara (mediante sigprocmask las señales S1 S2 .... Si no se especifican señales nos informa de las que están enmascaradas. Con -n las desenmascara.

ignorar [S1] [S2] ...
Ignora las señales S1 S2 .... Si no se especifican señales nos informa de las que están ignoradas.

defecto [S1] [S2] ...
Pone las señales S1 S2 ...asu acción por defecto. Si no se especifican señales nos informa de las que están a su accion por defecto.

bucle
Hace que el shell entre en un bucle infinito. Instala un manejador para SIGINT que permite salir del bucle pulsando control-c para seguir ejecutando el shell.

segmentation
produce un fallo de segmentación en el shell. (No vale enviar SIGSEGV, tiene que ser un fallo de segmentación de verdad).

fpe
produce una excepción de la unidad en punto flotante en el shell. (No vale enviar SIGFPE, tiene que ser un fallo de segmentación de verdad).

uid [id]
. Si no se especifica uid informa de las credendiales (real y efectiva) de usuario del proceso del shell (informará tanto de la credencial numérica como del login asociado). Si se especifica id establece la credencial efectiva del shell a id.id puede representar tanto el valor numérico de la credencial como el login asociado. Ejemplo
# uid root
  Imposible cambiar credencial: not owner
# uid 15432
  Imposible cambiar credencial: not owner
# uid insaaa00
  Credencial efectiva de usuario establecida insaaa00 (12001)
#uid
  Credencial real de usuario insbbb00 (12007)
  credencial efectiva de usuario insaaa00 (12001)
infouser id
Informa del usuario id (id puede ser un número de usuario o un login). Informa del login, uid, gid, nombre, directorio HOME y shell.

Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (sigaction, sigprocmask, sigaltstack, setuid, getpwent ...)

FORMA DE ENTREGA Como en prácticas anteriores

FECHA DE ENTREGA VIERNES 19 ENERO 2007