0
동일한 프로세스 내의 다른 스레드에서 신호를 감지하는 스레드 실행을 시도 중입니다.신호 스레드 문제
sigset_t sigset;
sigfillset(&sigset);
pthread_sigmask(SIG_BLOCK, &sigset, &old);
내가 이런 짓을하면, 나는 다음 과정을 디먼 화 : 이것은 다음과 같이 스레드 킥 오프 완료 "SignalHandler"라는 다른 클래스 내에서 이루어집니다
m_child = fork();
if (m_child == 0)
{
// Start the thread responsible for detecting a signal
}
:
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"를 실행하면 작동하지만 다른 스레드에서 불법적 인 포인터 조작을 실제로 수행하면 프로세스 코어가 덤프됩니다.
왜 하위 스레드에서 생성 된 신호가 내 신호 늘리기 스레드에서 발견되지 않습니까?