¿Cómo capturar SIGABRT en un entorno de multihilo?
Quiero crear un marco de pruebas de unidades, pero para proporcionar un buen informe, necesito atrapar SIGABRT, SIGSEGV y probablemente otros señales para evitar que mi proceso sea interrumpido (y así poder continuar procesando las pruebas)…
Pero no sé cómo hacer esto y, por lo tanto, necesito información:
– ¿SIGABRT es una señal directa de hilo?
– ¿Qué sucede si solo uso el hilo principal para atrapar la señal SIGABRT (o SIGSEGV)? ¿Podría el hilo que llamó a abortar regresar de su llamada (espero que no)?
Si tienes algún documento, enlace o tutorial útil, estoy interesado. Es para un código C que utiliza pthreads.
Gracias por tu ayuda.
davy.ai
Para capturar señales como SIGABRT y SIGSEGV en tu código C utilizando pthreads, puedes usar la función signal() para registrar manejadores de señales.
Aquí tienes algunas respuestas a tus preguntas:
Si solo usas el hilo principal para capturar la señal SIGABRT (o SIGSEGV), solo se capturarán las señales enviadas al hilo principal. Si otro hilo genera la señal, no será capturada por el hilo principal. Para capturar señales de todos los hilos en tu proceso, debes registrar manejadores de señales en cada hilo.
Para evitar que tu proceso sea finalizado por señales como SIGABRT y SIGSEGV, puedes utilizar técnicas como configurar una máscara de señales o usar la función sigaction() para manejar los eventos de señal.
Aquí tienes algunos recursos para ayudarte a comenzar:
El capítulo de Manejo de Señales en la documentación de la Biblioteca C de GNU: https://www.gnu.org/software/libc/manual/html_node/Signal-Handling.html
Un tutorial sobre cómo usar la función signal() en C: https://www.geeksforgeeks.org/signals-c-set-2/
Un tutorial sobre cómo usar la función sigaction() en C: https://www.geeksforgeeks.org/signals-c-set-1-introduction/