Я пытаюсь запустить поток, который будет отвечать за обнаружение сигнала от любого другого потока в том же процессе.
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", но когда я фактически выполняю некоторые недопустимые манипуляции с указателями (в любом другом потоке), ядро процесса сбрасывает.
Почему сигнал, генерируемый дочерней нитью, не попадает в мою цепочку повышающего сигнала?