pthread에서 시그널처리 - sigwait()함수가 모든 시그널을 다 대기시킵니다.
글쓴이: hayarobi / 작성시간: 금, 2006/11/17 - 3:22오후
제가 시그널 처리를 특정 쓰레드에서 해 보려고 코드를 작성해 봤습니다.
메인 쓰레드에서 pthread_sigmask로 검출하려는 시그널을 막고 막은 시그널을 하위쓰레드나 메인 쓰레드에서 sigwait()함수로 검출해 내는 방식이었죠. 이 방법이 검출하는 시그널에서는 문제가 없이 잘 돌아가는데 그 외의 시그널들에서 문제가 생기네요. sigwait함수가 대기중일 때에는 핸들러가 동작이 안 되다가 대기가 풀릴 때, 그러니까 sigwait()함수가 검출하는 시그널이 들어온 시점에서 다른 시그널 핸들러도 동작을 했습니다.
예를 들어서 제가 시그널 1,3,10번을 걸어두었습니다.
외부에서 kill 명령을 이용해서 1,3,10번을 보내면 sigwait가 바로 반응을 합니다. 하지만 여기서 11번 신호를 보내면 sigwait()에서 검출하는 시그널이 아니기 때문에 프로그램이 여전히 대기상태입니다. 기본 시그널핸들러(SIGSEGV가 코어덤프인가요?)도 동작을 안 합니다. 그 다음에 3번 시그널을 보내 sigwait대기가 풀리면 그제서야 11번 시그널에 대한 핸들러가 동작해 종료를 합니다. 코어 설정을 안 해서인지 코어덤프가 안 뜨기는 합니다만 어쨌든 sigwait가 다른 시그널까지도 함께 대기하게 만드는 것 같네요. 원래 이런가요? 다른 시그널도 바로 동작할 수 있도록 할 방법은 없는지요?
Forums:
댓글 달기