¿Por qué sigaction() y pthread_kill() no funcionan al enviar y recibir señales en Linux C?
1. De forma predeterminada, la señal será recibida y procesada por el proceso principal, incluso si la función de procesamiento de señales está registrada por el subproceso secundario.
2. palabra de máscara de señal, que puede Utilice la función sigprocmask para bloquear el procesamiento de respuesta de un subproceso a la señal, dejando solo el subproceso que necesita procesar la señal para procesar la señal especificada.
3. Para una determinada función de procesamiento de señales, prevalecerá la última función de procesamiento registrada cuando se ejecuta el programa, es decir, en todos los subprocesos, la misma señal debe procesarse de la misma manera en cualquier subproceso. p>
4. Puede usar pthread_kill para enviar señales al hilo especificado
Declaración de APUE: cada hilo tiene su propia máscara de señal, pero la señal es procesada por todos los hilos en el proceso *** Compartido,
Esto significa que aunque un solo hilo puede bloquear ciertas señales, cuando el hilo modifica el comportamiento de procesamiento relacionado con una señal, todos
Todos los hilos comparten este cambio en el comportamiento de procesamiento. De esta manera, si un subproceso elige ignorar una señal, otros subprocesos pueden
volver al comportamiento de manejo predeterminado de la señal o establecer un nuevo controlador para la señal, deshaciendo así el
< p del subproceso anterior. >Selección de señal.Las señales en el proceso se envían a un solo hilo. Si la señal está relacionada con una falla de hardware o un tiempo de espera del temporizador, el modelo se envía
al hilo que causó el evento. , mientras que otras señales se envían a cualquier hilo.
El comportamiento de sigprocmask no está definido en procesos multihilo. Los hilos deben usar pthread_sigmask
Resumen: Una señal puede ser procesada por cualquier hilo que no la enmascare, pero dentro de un hilo. proceso Solo hay una función de controlador que utilizan varios subprocesos.