Las llamadas se utilizan para

manejar interrupciones por software
hacer reports de interrupciones hardware
detectar instrucciones ilegales
rebosamiento de variables

Cuando una señal se envía a un proceso, que no esté preparado para recibirla, el proceso se mata.

SIGNAL(señal, &funcion)

int señal;

int (*función)(); función a realizar cuando se recibe una señal

Esta llamada se utiliza para indicar que se está preparado para recibir algún tipo de señal y suministrar la dirección del procedimiento manejador de la señal.

wpe1.jpg (22679 bytes)

Después del SIGNAL, si se recibe una señal por ejemplo SIGINT (pulsar la tecla DEL), se efectúa:

1) El estado del proceso se guarda en su propia pila.

2) Se ejecuta el manejador de la señal.

SIGRETURN (&contexto)

Es llamado por el manejador que atiende la señal cuando termina.

Recupera el estado del proceso interrumpido desde la pila y lo continúa.

Los tipos de señales son:

1 SIGHUP El modem ha detectado línea telefónica colgada

2 SIGINT La tecla DEL ha sido pulsada

3* SIGQUIT Señal Quit (desde el teclado CTRL \)

4* SIGILL Instrucción ilegal

5* SIGTRAP Traza de los traps

6* SIGABRT Abortar un programa

7* SIGUNUSED Instrucción EMT

8 SIGFPE Rebosamiento de coma flotante

9 SIGKILL Matar un proceso

10 SIGUSR1 El usuario define la señal # 1

11* SIGSEGV Violación de segmentación

12 SIGUSR2 El usuario define la señal # 2

13 SIGPIPE Escritura en pipe sin lectores

14 SIGALRM Alarma

15 SIGTERM Software genera una señal de terminación

16 no asignada

17 SIGCHLD Proceso hijo terminado o bloqueado

18 SIGCONT Si está bloqueado continuar

19 SIGSTOP Señal de paro

20 SIGTSTP Señal de paro interactiva

21 SIGTTIN Proceso en segundo plano quiere leer

22 SIGTTOU Proceso en segundo plano quiere escribir

23 SIGWINCH Cambio del tamaño de la ventana

Las señales entre paréntesis no son soportadas por MINIX.

Los asteriscos denotan aquellas señales que causan un volcado del proceso, si no son atendidas.

Después de recibir una señal, es necesario volver a permitir recibir otra señal con otro SIGNAL, ya que si no, puede recibirse una señal y matar el proceso (acción por defecto).

Existen dos funciones predefinidas que el usuario puede utilizar:

SIG_IGN, para que las señales se ignoren (excepto SIGKILL).
SIG_DFL para ejecutar la acción por defecto de matar al proceso.

Ejemplo: Supongamos que lanzamos un comando en modo tanda: command &

Es indeseable que la señal DEL, del teclado pueda afectar a ese proceso, así, el Shell después de ejecutar el FORK, pero antes del EXEC deberá hacer

signal (SIGNIT, SIG_IGN);
signal (SIGQUIT, SIG_IGN);

que inhiben las señales DEL, y QUIT (CTRL\).

SIGACTION (sig, *act, *oact)

Es una nueva versión de signal, examina, pone o modifica los atributos de una señal.

Sig es un entero que indica la señal.

*act es una estructura que contiene los atributos y manejador de la señal

*oact es la estructura que recibe los atributos antes de la llamada.

 

KILL

wpe2.jpg (5016 bytes)

 

La llamada kill, permite enviar señales entre procesos que tienen el mismo uid (identificador de usuario) la forma es: kill (pid, sig)

pid -> identificador del proceso

sig -> tipo de señal

sig = 9 es la señal SIGKILL, que mata cualquier proceso, aún en modo tanda, esta señal no puede ser ignorada. 

ALARM (segundos)

Esta llamada se utiliza para interrumpir un proceso al cabo de un cierto tiempo, su parámetro especifica el tiempo en segundos, después del cual el núcleo envía la señal SIGALRM al proceso.

Un proceso solo puede tener una alarma pendiente, para resetear una alarma, basta hacer una llamada de alarma con parámetro cero. 

PAUSE (segundos)

Esta llamada le dice al S.O. que suspenda al proceso, hasta que se reciba una señal. 

SIGPROCMASK(how, &set, &old)

Esta señal permite bloquear un conjunto de señales mediante una mascara de bits que le envía al núcleo del sistema.

SIGPENDING(SET)

Obtiene el conjunto de señales bloqueadas.

SIGSUSPEND(sigmask)

Permite a un proceso establecer atómicamente el mapa de bits de las señales bloqueadas y suspenderse a sí mismo.