多进程(四)
定时器信号
SIGALRM 信号是用来通知进程的定时器到期的。它是一个非可靠信号,即使进程捕获了它也不能保证定时器一定会到期。
定时器信号的使用场景:
- 定时器信号可以用来实现计时器功能。
- 定时器信号可以用来实现超时重试功能。
- 定时器信号可以用来实现定时任务功能。
alarm()函数
alarm()函数用来设置一个定时器,单位是秒。当定时器到期时,会向进程发送SIGALRM信号。
函数原型:
unsigned int alarm(unsigned int seconds);
返回值:
- 如果成功设置定时器,则返回之前的定时器值(以秒为单位)。
- 如果定时器未设置,则返回0。
参数说明:
- seconds:定时器的秒数。
要点:
定时器的定时任务由内核完成, alarm 函数值负责设置定时时间, 并告诉内核启动定时器
当定时时间超时后,内核会向进程发出 SIGALRM 信号
示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
//信号处理函数
void do_sig_alarm(int sig);
int main(){
unsigned int ret;
ret= alarm(5);//设置定时器,5秒,由内核来进行定时,时间结束后会发送SIGALRM信号
printf("定时器返回: %d\n", ret);//ret为0,前一次设置定时器或者定时器时间已经用完
// ret= alarm(5);//设置定时器,5秒,由内核来进行定时
// printf("定时器返回: %d\n", ret);//ret为5
__sighandler_t r;//信号处理函数的返回值
r=signal(SIGALRM,do_sig_alarm);
if(r==SIG_ERR){
//出错处理
perror("signal");//出错处理
exit(1);//退出程序
}
pause();//暂停程序,等待定时器超时,时间结束后会发送SIGALRM信号 默认是结束进程
return 0;
}
//信号处理函数
void do_sig_ala