#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum,sighandler_t handler);-功能:设置某个信号的捕捉行为
-参数:
-signum:要捕捉的信号;
-handler:捕捉到信号要如何处理
-SIG_IGN:忽略信号
-SIG_DFL:使用信号默认的行为
-回调函数:这个函数是内核调用,程序员只负责写,捕捉到信号后如何去处理信号。
-需要程序员实现,提前准备好,函数类型根据实际需求,看函数指针的定义。
-不是程序员调用,而是当信号产生,由内核调用
-函数指针是实现回调的手段,函数实现之后,将函数名放到函数指针的位置即可。
-返回值:
成功,返回上一次注册的信号处理函数的地址,第一次调用返回NULL
失败,返回SIG_ERR,设置错误号。
注意:SIGKILL SIGSTOP不能被捕捉,不能被忽略。
明白了上述各个指令的意思后就可以书写代码了。
以下代码实现的功能是首先发送一个信号“开始计时了...”,然后等待3秒后,每2秒发送一次信号“捕捉到的信号是:14.XXXXXXX”.
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <sys/time.h>
  4 #include <unistd.h>
  5 #include <signal.h>
  6 void show(int num)
  7 {
  8         printf("捕捉到的信号是:%d\n",num);
  9         printf("XXXXXXXXX\n");
 10 
 11 }
 12 int main()
 13 {
 14         signal(SIGALRM,show);
 15         struct itimerval new_val;
 16         //设置间隔时间
 17         new_val.it_interval.tv_sec=2;
 18         new_val.it_interval.tv_usec=0;
 19         //设置延长时间,3秒之后第一次定时
 20         new_val.it_value.tv_sec=3;
 21         new_val.it_value.tv_usec=0;
 22         int val=setitimer(ITIMER_REAL,&new_val,NULL);//非阻塞
 23         if(val==-1)
 24         {
 25                 perror("setitimer");
 26                 exit(0);
 27         }
 28         printf("开始计时了...\n");
 29         while(1)
 30         {}
 31         return 0;
 32 }输出结果为:

觉得不错就点个赞吧。










