설명

지정한 시간이 되면 자기 자신에게 SIGALRM 시그널을 전송합니다. 프로세스는 SIGALRM을 받으면 종료되므로 이를 유의하셔야 합니다.

아래 예제 1을 보시면 3초 후에 프로그램이 종료되는 것을 보실 수 있습니다.

헤더 unistd.h
형태 unsigned int alarm(unsigned int seconds);
인수
unsigned int seconds seconds 초 후에 시그널 전송
반환
양수 이전에 alarm() 호출로 시그널이 발생하기 까지 남은 시간
0 이전에 설정된 알람이 없다.

예제 1

#include <stdio.h>
#include <unistd.h>

int main( void)
{
   alarm( 3);
   while( 1 )
      ;
}
]$ ./a.out
자명종 시계     <--- 무한 루프가 있음에도 3초 후 자동 종료
]$

예제 2

아래의 예제는 SIGALRM을 사용자 시그널 핸들러를 이용하여 계속 alarm()을 호출하여 1초마다 SIGALRM을 발생하도록 했습니다. 마치 타이머 처럼 계속 사용자 시그널 핸들 함수를 호출할 수 있습니다.

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

int   counter = 0;

void sigint_handler( int signo)
{
   printf( "알람 발생 %d!!\n", counter++);
   alarm( 1);
}

int main( void)
{
   signal( SIGALRM, sigint_handler);
   alarm( 1 );
   while( 1 )
      ;
}
]$ ./a.out
알람 발생 0!!
알람 발생 1!!
알람 발생 2!!
알람 발생 3!!
     :