Je tente d'exécuter un thread qui sera chargé de détecter un signal provenant de n'importe quel autre thread dans le même processus.Un problème de threads de signalisation
sigset_t sigset;
sigfillset(&sigset);
pthread_sigmask(SIG_BLOCK, &sigset, &old);
Une fois que je l'ai fait, je daemonize alors le processus:
m_child = fork();
if (m_child == 0)
{
// Start the thread responsible for detecting a signal
}
Cela se fait dans une autre classe appelée « SignalHandler » où le coup d'envoi à ce fil se fait comme suit:
m_pThread = new boost::thread(boost::bind(&SignalHandler::operator(), this));
et le foncteur fonctionne dans une boucle serrée comme suit:
while (1)
{
if (sigtimedwait(&sigset, &info, &ts) == -1)
{
if (errno == EAGAIN || errno == EINTR)
{
std::cout << "Time-out waiting for signal" << std::endl;
}
throw SystemError("sigtimedwait error");
}
else
{
std::cout << "Detected a signal [" << info.si_signo << "]" << std::endl;
}
}
Cela fonctionne quand je fais un "kill -9 myProcess", mais quand je réalise réellement une manipulation de pointeur illégale (dans n'importe quel autre thread), les décharges de noyau de processus.
Pourquoi le signal produit par le fil de l'enfant n'est-il pas pris dans mon fil d'accrochage du signal de survoltage?