쓰레드에서 sigwait사용에 대한 질문입니다..
글쓴이: kim1158 / 작성시간: 토, 2005/04/16 - 2:58오전
void* ClassA::ThreadEntry(void* pData)
{
pthread_detach(pthread_self());
ClassA* obj= (ClassA*)pData;
sigset_t mask;
int signo;
sigemptyset(&mask);
sigaddset(&mask,SIGUSR1);
while(1){
sigwait(&mask,&signo);
..........job............
}
}
쓰레드를 생성한후 진입점(위 코드)로 진입한후 sigwait로 SIGUSR1을 기다리면서 block 되어있는 상태입니다.
문제가 무엇인지 설명을 하면..
다른 쓰레드에서 SIGUSR1시그널을 전송한 후에 프로그램을 ctrl+c로 종료하면 정상적으로 모든 쓰레드가 종료되는 데요
SIGUSR1이 발생하기 전에 프로그램을 sigint로 종료(ctrl+c)하는경우 이 쓰레드가 정상적으로 종료되지 않습니다.
ps 정보에 찍히네요... 무엇이 문제일지..
시그널 마스킹에 문제가 있나 싶어서
mask에 SIGKILL과 SIGINT을 넣어봤는데도 그러네요..
sigemptyset(&mask);
sigaddset(&mask,SIGKILL); sigaddset(&mask,SIGINT);
힌트좀 주실분-!!
Forums:
댓글 달기