이것을 알려주는 발신지는 사용자 프로그램이 아닌 운영체제이며, 따라서, 사용자 프로그램과 통신을 해야하는데, 가장 간단하지만 필수적인 통신메카니즘인 시그널을 사용하게 됩니다. 즉, 커널(운영체제)가 사용자에게 시그널을 줍니다.
시그널의 종류는 다양하며 그중 하나가 알람입니다.
시그널을 이용해 다양한 처리를 수행할 수 있습니다. 시그널을 깊이 공부하세요.
* 종료되지 않게 하려면,
usleep()을 부르기 전에
signal(SIGALRM, SIG_IGN);
을 호출하시면 해당 시그널을 무시할 수 있습니다.
SIG_IGN부분은 (시그널핸들러로서)함수포인터로서, 이 부분에 사용자 정의함수를 등록하면, 커널이 시그널을 줄경우 해당함수를 실행하게 됩니다. 단지, SIG_IGN을 등록하면 해당 시그널을 무시하게됩니다.
사용자가 시그널핸들러를 등록하지 않으면, 미리 정의된 루틴이 수행되게 되어있는데(default action), 이는 그 시그널에 따라 다양하며, 보통은 시그널을 수신한 프로세스를 종료시킵니다.
사용자가 지정한 특정 시간이 되었다를 알려주는 것입니다.이것을 알
사용자가 지정한 특정 시간이 되었다를 알려주는 것입니다.
이것을 알려주는 발신지는 사용자 프로그램이 아닌 운영체제이며, 따라서, 사용자 프로그램과 통신을 해야하는데, 가장 간단하지만 필수적인 통신메카니즘인 시그널을 사용하게 됩니다. 즉, 커널(운영체제)가 사용자에게 시그널을 줍니다.
시그널의 종류는 다양하며 그중 하나가 알람입니다.
시그널을 이용해 다양한 처리를 수행할 수 있습니다. 시그널을 깊이 공부하세요.
* 종료되지 않게 하려면,
usleep()을 부르기 전에
signal(SIGALRM, SIG_IGN);
을 호출하시면 해당 시그널을 무시할 수 있습니다.
SIG_IGN부분은 (시그널핸들러로서)함수포인터로서, 이 부분에 사용자 정의함수를 등록하면, 커널이 시그널을 줄경우 해당함수를 실행하게 됩니다. 단지, SIG_IGN을 등록하면 해당 시그널을 무시하게됩니다.
사용자가 시그널핸들러를 등록하지 않으면, 미리 정의된 루틴이 수행되게 되어있는데(default action), 이는 그 시그널에 따라 다양하며, 보통은 시그널을 수신한 프로세스를 종료시킵니다.
추가질문입니다.
sleep을 쓸 때내ㅡㄴ 이런 일이 한번도 일어나지 않았었는데,
usleep을 쓰니까 이런 일이 발생하더군요. (그나마도 딱 한번 발생하고 그 이후로는 아직 그런 경우를 겪지 못했습니다.)
sleep을 쓰다가 usleep을 썼을 때 '경보시계'가 발생할 수 있는 것인가요?
댓글 달기