2011-05-06 17 views
7

Esto parece una pregunta tonta, pero no puedo encontrar la respuesta en cualquier lugar que miro. Sé que en UNIX, las señales se manejan de forma asíncrona. Si escribo una función que maneja una señal, ¿dónde se ejecuta esa función? ¿Se ha generado un nuevo hilo? ¿Se ha interrumpido un hilo existente de alguna manera? ¿O esto se maneja en un hilo del sistema como E/S asíncrona?¿Cómo se manejan las señales asíncronas en Linux?

Respuesta

2

Un hilo de proceso existente se interrumpe hasta que la función retorna. Existen serias restricciones sobre lo que puede hacer con seguridad para garantizar que no dañe el estado de las llamadas a funciones en las que el hilo estuvo en el medio; específicamente, cualquier función que llame que el hilo ya haya estado llamando debe ser una reentrada asíncrona. Ver las páginas man, p. Ej. señal, sigaction para obtener más detalles o hacer preguntas más específicas a su gusto.

6

Una función de señal se ejecuta como si se hubiera interrumpido un hilo en el proceso. Es decir, el manejador de señal se llama usando el hilo señalado y la pila se reorganiza para que cuando el manejador de señal regrese el hilo continúe la ejecución. No se introducen nuevos hilos.

2

No es un hilo por separado, pero su código se suspende apresuradamente. Es por eso que solo un subconjunto limitado de las llamadas POSIX está disponible.

Desde el signal man page:

El manejador de rutina debe tener mucho cuidado, ya que el procesamiento en otros lugares fue interrumpido en algún punto arbitrario. POSIX tiene el concepto de "función segura". Si una señal interrumpe una función insegura y el manejador llama a una función insegura, entonces el comportamiento no está definido. Las funciones seguras se enumeran explícitamente en los diversos estándares.

Cuestiones relacionadas