função de manipulador de sinal no ambiente multithread
No meu aplicativo GUI multithreaded eu tenho o seguinte código de manipulação de sinal. Eu quero melhorar este código para que ele seja correto e seguro, mas há algumas coisas que eu não entendo completamente no tratamento de sinal:
é sinal tratado no processo ou nível de thread (posso ter manipuladores de sinal específicos de thread)?em qual contexto do thread a função signal_handler é executada?é possível enviar muitos sinais SIGTERM em um curto período de tempo?faz sentido usar um mutex para impedir a execução 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);
}
Eu registro manipuladores de sinal na minha função init:
// register signal handlers
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGUSR1, signal_handler);