Maneira portátil de capturar sinais e relatar problemas ao usuário

Se por algum milagre ocorrer um segfault em nosso programa, eu quero pegar o SIGSEGV e deixar o usuário (possivelmente um cliente GUI) saber, com um único código de retorno, que um problema sério ocorreu. Ao mesmo tempo, gostaria de exibir informações na linha de comando para mostrar qual sinal foi capturado.

Hoje nosso manipulador de sinal é o seguinte:

<code>void catchSignal (int reason) {
  std :: cerr << "Caught a signal: " << reason << std::endl;
  exit (1);
}
</code>

Eu posso ouvir os gritos de horror com o acima, como li a partir destefio que é mal chamar uma função não reentrante de um manipulador de sinal.

Existe uma maneira portátil de lidar com o sinal e fornecer informações aos usuários?

EDITAR: Ou pelo menos portátil dentro do quadro POSIX?

questionAnswers(4)

yourAnswerToTheQuestion