La entrada en POSIX sobre " Generación y entrega de señales " en "Justificación: Información general de las interfaces del sistema" dice
Las señales generadas para un proceso se entregan a un solo hilo. Por lo tanto, si más de un hilo es elegible para recibir una señal, se debe elegir uno. La elección de los subprocesos se deja totalmente en manos de la implementación, tanto para permitir la gama más amplia posible de implementaciones conformes y para dar a las implementaciones la libertad de entregar la señal al subproceso "más fácil posible" si hubiera diferencias en la facilidad de entrega entre diferentes subprocesos.
Del signal(7)
manual en un sistema Linux:
Se puede generar una señal (y, por lo tanto, pendiente) para un proceso en su conjunto (por ejemplo, cuando se envía usando kill(2)
) o para un subproceso específico (por ejemplo, ciertas señales, como SIGSEGV y SIGFPE, generadas como consecuencia de la ejecución de una máquina específica) la instrucción de idioma está dirigida por hilos, al igual que las señales dirigidas a un hilo específico que usa pthread_kill(3)
). Se puede entregar una señal dirigida al proceso a cualquiera de los hilos que actualmente no tienen la señal bloqueada. Si más de uno de los hilos tiene la señal desbloqueada, entonces el núcleo elige un hilo arbitrario al que entregar la señal.
Y en pthreads(7)
:
Los subprocesos tienen configuraciones distintas de pila de señal alternativa. Sin embargo, la configuración de la pila de señal alternativa de un nuevo subproceso se copia del subproceso que la creó, de modo que los subprocesos inicialmente comparten una pila de señal alternativa (fijada en el núcleo 2.6.16).
Del pthreads(3)
manual en un sistema OpenBSD (como ejemplo de un enfoque alternativo):
Los manejadores de señales normalmente se ejecutan en la pila del hilo que se está ejecutando actualmente.
(Actualmente no estoy al tanto de cómo se maneja esto cuando varios subprocesos se ejecutan simultáneamente en una máquina multiprocesador)
La implementación anterior de LinuxThread de hilos POSIX solo permitía que hilos individuales distintos fueran apuntados por señales. Desde pthreads(7)
un sistema Linux:
LinuxThreads no admite la noción de señales dirigidas por procesos: las señales pueden enviarse solo a hilos específicos.