3.305 cursos gratis
6.270.120 alumnos
Publica tu curso gratis
Busca cursos gratis:
Estás aquí: mailxmail > Cursos de Informática > Programación > Procesos en C. Sincronización (primera parte) > Procesos en C. Gestores de señales

Procesos en C. Sincronización (primera parte)

Autor: Editorial McGraw-Hill
Curso: 5/5 5/5 (1 opinión) |993 alumnos|Fecha publicación: 21/10/2008

Capítulo 9:

 Procesos en C. Gestores de señales

Gestores de señales

La consecuencia de enviar una señal a un proceso, si éste no está preparado para aceptar dicha señal, es la finalización de su ejecución; en la terminología más habitual, se dice que el proceso "muere". Si el proceso dispone de un gestor de señales, el proceso responderá a la señal ejecutando la rutina asignada por el programador a las señales. Esta rutina podrá ser desarrollada por el propio programador, o bien será la asociada por defecto a la señal.

El gestor de señales anuncia que el proceso está preparado para aceptar cierto tipo de señales y proporciona la dirección de la rutina de tratamiento de señales, en caso de ser ésta de rango especial. Se dice entonces que el proceso está preparado para capturar esas señales.

Se asigna una señal a su rutina mediante una llamada a una función de Linux. Si se genera una señal de carácter relevante, por ejemplo, la pulsación de la tecla Supr, se realiza una llamada al gestor de señales y el proceso interrumpe su ejecución. El gestor puede estar funcionando el tiempo que sea necesario, y realizar o responder a cualquier llamada del sistema. En la práctica, el tiempo de funcionamiento suele ser pequeño; cuando finaliza, restaura el estado del proceso, que continúa su ejecución en el punto en que había sido interrumpido. Después de capturar una señal se debe restablecer el gestor de señales mediante otra llamada a la función que asigna la señal al procedimiento (si bien algunas señales se restablecen por sí mismas).

Si otra señal del mismo tipo llega antes de que el gestor de señales se haya restablecido, se ejecuta la acción por defecto de la señal recibida, por lo general, la finalización del proceso. En vez de proporcionar una función especial para capturar la señal, es posible, como ya se ha dicho, ignorar la señal o restaurar la acción por defecto mientras ésta se está gestionando.

Un problema habitual en el uso de gestores de señales es que la rutina de tratamiento de la señal no conozca el estado del programa cuando aparece la señal. El programa puede estar solicitando memoria mediante malloc, liberándola mediante free, realizando una llamada a una función que modifique el valor de una variable estática o de una variable global externa, o esperando la conclusión de un proceso hijo mediante wait. En estos casos, el programador debe poner especial cuidado en la rutina de tratamiento: por ejemplo, si se va a modificar una variable global dentro del procedimiento de atención a la señal (bien directamente, bien porque se llame a una función que lo modifique), se debe guardar en una variable temporal el valor original y, al finalizar la rutina, restaurar dicho valor.

Un ejemplo clásico de esta situación aparece al gestionar la señal SIGCHLD, ya que por regla general la rutina de atención utilizará alguna de las funciones wait, y esta llamada producirá una modificación de la variable externa errno, que se encuentra definida en <errno.h>. Cuando se trabaja con procesos hijo, el gestor de señales puede interferir en el uso de la función wait, porque cuando el proceso padre está esperando la terminación del proceso hijo, si el usuario envía una señal a ambos procesos, la gestión de ésta saca al proceso padre de su estado de espera. Es decir, mientras el padre espera, las señales deben ser gestionadas en el proceso hijo; por tanto, deben activarse los gestores de señales en el padre para que las ignore.

Recibe nuestras novedades
Al presionar "Recibir" estás dándote de alta y aceptas las condiciones legales de mailxmail

Hay 1 opinión. Opina sobre este curso.


Cursos similares a Procesos en C. Sincronización (primera parte)


Cursos Valoración Alumnos Vídeo
Técnicas para el desarrollo de computación móvil (orientado a PDA)
Uno de los nuevos paradigmas en el desarrollo de proyectos informáticos es la computación móvil (computación Ubicua). Aquí se verá todo lo que involucra la creación de un... [31/03/06]
 4,33/5 1.369  
Instalación de un Servidor de Correo en Linux
Linux es un sistema operativo libre, con lo que no se tiene que pagar por ningún tipo de licencia. También se puede conseguir el código fuente y poderlo modificar libreme... [16/06/04]
 4,38/5 13.740  
Creación de Paginas Web con Html
HTML es el lenguaje básico y muy sencillo que nos permite la creación de Paginas Web. Este curso ha nacido con la intención de complementar los anteriores cursos de JavaS... [26/05/05]
 4,47/5 20.578  


Publicar en   del.icio.us    digg    meneame

¿Qué es mailxmail.com?|ISSN: 1699-4914|Recomiéndanos|Ayuda
Condiciones legales de mailxmail