转载原文:https://www.cnblogs.com/yxk529188712/p/4982401.html
alarm(time);执行之后告诉内核,让内核在time秒时间之后向该进程发送一个定时信号,然后该进程捕获该信号并处理;
pause()函数使该进程暂停让出CPU,但是该函数的暂停和前面的那个sleep函数的睡眠都是可被中断的睡眠,也就是说收到了中断信号之后再
重新执行该进程的时候就直接执行pause()和sleep()函数之后的语句;
下面是一个定时2秒的实例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void sig_handler(int num)
{
printf("receive the signal %d.\n", num);
}
int main()
{
signal(SIGALRM, sig_handler);
alarm(2);
while(1){
pause();
printf("pause is over.\n");
}
exit(0);
}
如果我们想程序每2秒都定时一下,这样实现也很简单,我们在处理定时信号的函数中再次定时2秒;实例如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void sig_handler(int num)
{
printf("receive the signal %d.\n", num);
alarm(2);
}
int main()
{
signal(SIGALRM, sig_handler);
alarm(2);
while(1){
pause();
printf("pause is over.\n");
}
exit(0);
}
可以看出程序每隔2秒就会收到信号14,也就是SIGALRM信号;
并且当处理完该信号之后,直接执行pause()函数下面的语句;说明pause()是可被中断的暂停;