es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    • SIGABRT no es una señal directa de hilo. Es una señal a nivel de proceso que puede ser generada por cualquier hilo en el proceso. Cuando se genera, provoca la terminación de todo el proceso.
    • 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:

Comments are closed.