아래소스처럼. sleep(10)하는중에 알람신호가 처리되면
더이상 sleep하지 않고 바로 다음문장이 실행되는데
원인은 무엇인가요?
static struct sigaction act;
act.sa_handler = mysig;
sigaction( SIGALRM , &act , NULL );
alarm( 3 );
sleep( 10 );

------------

void mysig(int signo)
{
fprintf( stderr , "%d signal is received\n" , signo );
}

=================================================================================================================

unix의 sleep구현은 벤터마다 어떤 차이가 있을지 모르겠으나
리눅스에서 sleep과 alarm을 같이 사용하는 것은
금기시 되고 있습니다.

왜냐면 슬립 자체가 SIGALRM를 사용하기 때문이죠.
역시나 setitimer 와 getitimer도 마찬가지 입니다.

음... 정확하게 일정시간을 기다릴려면
select을 사용하는 방법이 있습니다.
fd를 NULL로 지정하고 time구조체에만 시간을 채우면
원하는 바를 얻으리라 생각합니다.

ps. sleep때, 시그널에 의해 조기종료된 상황이라면
sleep의 rtn값을 확인해보세요. 그러면 sleep을 다 못하고
남은 시간이 나옵니다.


WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,