|
Las llamadas se utilizan para
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. Después del SIGNAL, si se recibe una señal por ejemplo SIGINT (pulsar la tecla DEL), se efectúa:
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:
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
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.
KILL
La llamada kill, permite enviar señales entre procesos que tienen el mismo uid (identificador de usuario) la forma es: kill (pid, sig)
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.
|