Función de manejador de señales en entornos multihilo.
En mi aplicación de GUI multiproceso tengo el siguiente código de manejo de señal. Quiero mejorar este código para que sea correcto y seguro, pero hay algunas cosas que no entiendo completamente en el manejo de señales:
¿Se maneja la señal en el proceso o en el nivel de subproceso (puedo tener manejadores de señal específicos de subproceso)?¿En qué contexto de hilo se ejecuta la función signal_handler?¿Es posible enviar muchas señales SIGTERM en poco tiempo?¿Tiene sentido usar un mutex para evitar la ejecución paralela de signal_handler?void signal_handler(int sig)
{
switch (sig)
{
case SIGTERM:
::wxLogMessage(wxT("SIGTERM signal received ..."));
break;
case SIGINT:
::wxLogMessage(wxT("SIGINT signal received ..."));
break;
case SIGUSR1:
::wxLogMessage(wxT("SIGUSR1 signal received ..."));
break;
default:
::wxLogMessage(wxT("Unknown signal received ..."));
}
// send wxCloseEvent to main application window
::wxGetApp().GetTopWindow()->Close(true);
}
Registro los manejadores de señales en mi función de inicio:
// register signal handlers
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGUSR1, signal_handler);