signal 중 하나인 SIGALARM 곤련 질문입니다.

trymp의 이미지

제가 정해진 시간에 특정 동작을 실행시키기 위해서 alarm() 를 사용했습니다.

물론 1~2분정도의 오차는 상관없습니다.

그래서 특정 시간대에 동작하도록 alarm()을 걸어놓았는데,

seconds 는 정확하게 계산해서 걸어놓았습니다.

alarm(3120) 으로 설정해놓았는데요. (52분후에)

그 시간에 동작하지 않고 몇시간 뒤에 동작을 합니다. -,.-

alarm signal 을 몇시간 뒤에 받음...

데몬은 백그라운드 상태에 multithread 이고

주기적인 block에는 sleep() 같은 것 않쓰고 select() 사용했습니다.

alarm() 함수에 무슨 버그가 있는 것인지???

왜 그런지 모르겠습니다.

고수님들의 많은 조언 부탁드립니다.

cinsk의 이미지

pthread_sigmask()를 쓰셨나요?

trymp의 이미지

..

cinsk의 이미지

signal은 현재 process에 전달되는 것이며, 어느 thread로 갈 것인지는 정해지지 않았습니다. 특정 thread에서 signal을 받고 싶다면, 다른 thread에서는 해당 signal을 block 해야만 합니다.

trymp의 이미지

alarm signal 이 전달될 쯤에 상태가 single 상태여도 pthread_sigmask() 를 해줘야 하나요?

thread 를 필요할 때만 돌리고 있는 상태인지라... -,.-

thread 에 대한 signal 처리를 정확히 나누어주면 alarm signal 이 제시간에

도착한다는 말씀이신거죠??

godofzam의 이미지

timeout값은 얼마로 사용하시나요?

trymp의 이미지

select 의 timeout 이 문제가 되는 것인가요?