2013-07-18 4 views
1

HPUX에서 SIGALRM 신호가 시스템에 의해 만들어지고 단일 스레드 응용 프로그램에서 프로세스에 의해 올바르게 캡처 될 수 있다는 것을 알았습니다. 그러나 스레드에서 SIGALRM을 설정하면 SIGALRM이 더 이상 발생하지 않습니다. 왜? 이 문제는 HPUX 플랫폼에서만 발생하지만 다른 UNIX 플랫폼 (solaris sparc, x86, Linux, AIX, Mac 및 Ubantu)에서 잘 작동합니다.HPUX의 스레드에서 SIGALRM이 발생하지 않는 이유는 무엇입니까?

도와주세요! 감사!

답변

-1

신호 처리 Multithreaded Environments : 신호 처리기 : 모든 UNIX 플랫폼에서 신호 처리기는 프로세스별로 설치됩니다. 다중 스레드 환경에서는 프로세스 내의 각 신호에 대해 하나의 신호 처리기 만 있습니다. 모든 스레드에 대해 설치된 마지막 신호 처리기는 프로세스의 모든 스레드에 대해 유효합니다. 핸들러는 신호가 전달 될 때 호출됩니다.

또한 SIGALRM은 수신하는 프로세스의 제어 범위를 벗어난 이벤트에 의해 생성 된 비동기 신호이며 예측할 수없는 시간에 도착합니다. 비동기 신호는 실행중인 명령어와 상관없이을 스레딩하지 않으므로 프로세스로 전달됩니다. 그렇기 때문에 SIGALRMHPUX의 스레드에서 발생하지 않습니다.

이것은 HP-UX 스케줄링 정책에 있습니다. Signal Processing Notes of HP-UX이 있습니다.

+0

정말 고마워요! 하지만 왜 다른 유닉스에서 작동합니까? 문제를 해결하는 방법? –

+0

그 이후로, HPUX의 스레드에서 타이머를 설정하는 방법은 무엇입니까? 안돼? –

관련 문제