Я пытаюсь запустить поток, который будет отвечать за обнаружение сигнала из любого другого потока в рамках одного процесса.Проблема с сигнальной нитью
sigset_t sigset;
sigfillset(&sigset);
pthread_sigmask(SIG_BLOCK, &sigset, &old);
После того, как я сделал это, я тогда демон процесса:
m_child = fork();
if (m_child == 0)
{
// Start the thread responsible for detecting a signal
}
Это делается в рамках другого класса под названием «SignalHandler», где стартовый к этой теме делаются следующим образом:
m_pThread = new boost::thread(boost::bind(&SignalHandler::operator(), this));
и функтор работает в цикле следующим образом:
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;
}
}
Это работает, когда я выполняю «kill -9 myProcess», но когда я фактически выполняю некоторые незаконные манипуляции с указателями (в любом другом потоке), дампы ядра процесса.
Почему сигнал, создаваемый дочерней нитью, не попал в мою сигнальную нить?