alarm과 sleep의 관계

미해결질문
유영재 프로필

"alarm이 울리면 프로세스가 sleep 상태라면 깬다"라는 것은 알겠는데

좀 더 덧붙여주실 얘기가 있으신가요? 두 함수를 같이 쓰진 않나요 보통?

아니면 alarm과 sleep 시간을 동시에 준다든지요??

ProgCoach4U 프로필
ProgCoach4U 1달 전

alarm() API로 설정한 시간이 만료되면 해당 프로세스로 SIGALRM이 전달됩니다. read() 등의 blocking operation을 수행하여 프로세스가 sleep 상태인 경우 signal 수신에 의해 깨어나게 된다는 의미 입니다. 이 때, read()와 같은 API가 에러에 의해 중단된 것이 아니므로 다시 read를 할 필요가 있다는 것이지요. 프로세스가 sleep 상태라는 것은 sleep() 함수를 호출했을 때를 의미하는 것은 아닙니다. 

결론적으로 read() 등의 blocking operation을 수행할 때는 signal에 의해 깨어나는 경우가 있으므로 이를 대비해야 하는 것이고, sigaction()으로 SA_RESTART 플래그가 설정된 signal들은, 이 시그널에 의해 깨어나지만 자동으로 다시 하던 일(read()와 같은)을 수행할 수 있습니다. 참고로, sleep()의 경우엔 자동으로 재시작되지 않습니다. :) 

API 별 동작은 man 7 signal을 참고하세요~ :)