Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJuan Mora Salas Modificado hace 8 años
1
Sistemas Operativos Unidad 8 Señales y funciones de tiempo
2
Contenido ● Concepto de señal ● Tipos de señales ● Envío y tratamiento de señales ● Funciones de tiempo ● Temporizadores
3
Concepto de señal ● Las señales son interrupciones software que pueden ser enviadas a un proceso para informarle de algún evento asíncrono o situación especial. ● Al recibir una señal el proceso puede: – Ignorar la señal – Invocar la rutina de tratamiento por defecto – Invocar una rutina de tratamiento propia
4
Concepto de señal... (2) ● Tratamiento de las señales por un proceso
5
Tipos de señales ● Las señales se pueden clasificar en los siguientes grupos: – Relacionadas con la terminación del proceso – Relacionadas con las excepciones introducidas por los procesos – Relacionadas con errores irrecuperables – Originadas desde un proceso en modo usuario – Relacionadas con la interacción de la terminal – Para ejecutar un proceso paso a paso.
6
Tipos de señales... (2) ● Señales definidas en – De las más utilizadas ● SIGTERM ● SIGKILL ● SIGINT ● SIGCLD
7
Envío y tratamiento de señales ● Envío de la señales – Llamada kill para enviar señales a otros procesos ● Sintaxis: int kill(pid_t pid, int sig); ● pid es un número entero positivo – pid > 0: proceso determinado. ● sig es el número de señal a enviar. ● Si la llamada tiene éxito retorna 0; encaso contrario -1 – Llamada raise para enviar señales a sí mismo ● Sintaxis: int raise(int sig); ● Equivalente a: kill(getpid(), sig);
8
Envío y tratamiento de señales... (2) ● Ejemplo sencillo del uso de Kill #include int main() { int pid; if (( pid = fork()) == 0) { while(1) { printf("HIJO.PID = %d\n", pid); sleep(1); } sleep(10); printf("PADRE. Terminación del proceso %d\n", pid); kill (pid,SIGTERM); return 0; } Este ejemplo crea un hijo y mientras exista debe mostrar la palabra hijo cada segundo y el padre a los 10 segundos debe mostrar la palabra PADRE y terminar el proceso del hijo con la señal SIGTERM.
9
Envío y tratamiento de señales... (3) ● Tratamiento de la señal – Se emplea la llamada signal ● Sintaxis: – void (*signal (int sig, void (*action) ())) (); – sig es el número de la señal a tratar – action es la rutina que se ejecuta cuando se recibe la señal ● La rutina a ejecutar puede ser una de tres posibilidades – SIG_DFL: ejecutar el tratamiento por defecto – SIG_IGN: ignorar la señal – dirección: de la rutina a ejecutar ● En caso de error se devuelve SIG_ERR
10
Envío y tratamiento de señales... (4) ● Ejemplo del uso de signal #include void manejador_SIGINT(int); int main() { if (signal(SIGINT, manejador_SIGINT) == SIG_ERR) { perror ("signal"); return -1; } while(1) { printf ("En espera de Ctrl-C\n"); sleep (999); } return 0; } void manejador_SIGINT (int sig) { printf("Señal número %d recibida.\n", sig); } La llamada al sistema signal() instala un nuevo manejador de señales para la señal ctrl+c. El manejador de señales queda establecido a manejador_SIGINT.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.