2013-01-17 4 views
1

모든 신호를 차단한다는 것을 제외하고는 here으로 설명한대로 애플리케이션에 신호 필터를 설정했습니다.이상한 신호가 수신되었습니다.

sigfillset (&signalSet); 

는 그리고 공공 문서도 /usr/include/bits/signum.h에 설명되지 않은 이상 신호 # 36를받을 수 있습니다. 그러나이 신호는 주 스레드의 sem_wait()에 영향을주고 차단되지 않습니다. 나는 그런 예외를 잡을 :

:: 실패() sem_wait 코드 : 레드햇은 4.1.2-44이 (GCC 버전 4.1.2 20,080,704)를 사용

4 (중단 시스템 호출) .

답변

3

POSIX 실시간 신호입니다. 이들은 SIGRTMIN + 1에서 SIGRTMAX까지의 범위에 있습니다 (/usr/include/bits/signum.h에서 찾을 수 있습니다).

자세한 내용은 man 7 signals, 'Real-time Signals'섹션을 참조하십시오. 당신이

sigfillset(&signalset); sigprocmask(SIG_BLOCK,&signalset,NULL);

또는

sigfillset(&signalset); pthread_sigmask(SIG_BLOCK,&signalset,NULL); 모든 신호를 차단하고 여전히 신호 (36)를 얻을 경우

, 난 당신이뿐만 아니라 신호를 사용하는 라이브러리 함수를 사용하는 것 같아요.

'strace'를 사용하여 신호 함수가 호출되는지 여부를 확인할 수 있습니다.

관련 문제