注意:
SIGKILL
、SIGSTOP
不能被捕捉,不能被忽略
-
函数方法:
sighandler_t signal(int signum, sighandler_t handler)
- 功能:设置某个信号的捕捉行为
- 参数:
- signum:要捕捉的信号
- handler:捕捉到信号要如何处理。
- SIG_IGN:忽略信号
- SIG_DFL:使用信号默认的行为
- 回调函数:这个函数是内核调用,程序员只负责写,捕捉到信号如何去处理。
- 返回值:
- 成功:返回上一次注册的信号处理函数的地址。第一次调用返回NULL。
- 失败:返回SIG_ERR,设置错误号。
-
使用示例:
#include <sys/time.h> #include <stdio.h> #include <stdlib.h> #include <signal.h> //signal使用的头文件 void myalarm(int num) { printf("捕捉到了信号的编号是:%d\n", num); printf("xxxxxxx\n"); } int main() { // 注册信号捕捉 // signal(SIGALRM, SIG_IGN); // 捕捉到SIGALRM信号时SIG_IGN(忽略) // signal(SIGALRM, SIG_DFL); // 捕捉到SIGALRM信号时SIG_DFL(默认操作,即终止进程) // typedef void (*sighandler_t)(int); // 表示sighandler_t类型为函数指针。 signal(SIGALRM, myalarm); struct itimerval new_value; // 设置间隔的时间 new_value.it_interval.tv_sec = 2; new_value.it_interval.tv_usec = 0; // 设置延迟的时间,3秒之后开始第一次定时 new_value.it_value.tv_sec = 3; new_value.it_value.tv_usec = 0; int ret = setitimer(ITIMER_REAL, &new_value, NULL); // ITIMER_REAL真实时间,周期性定时,非阻塞的 printf("定时器开始了...\n"); if(ret == -1) { perror("setitimer"); exit(0); } getchar(); return 0; }