<aside>
💡 signal
设置某个信号的捕捉行为
</aside>
SIGKILL
与SIGSTOP
不能被捕捉,也不能被忽略
参数
signum
:要捕捉的信号,一般使用宏值handler
:一个函数指针,指定捕捉到的信号要如何处理
返回值
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
// 自己实现的回调函数
void myalarm(int num) {
printf("捕捉到了信号的编号是:%d\\n", num);
printf("xxxxxxx\\n");
}
// 过3秒以后,每隔2秒钟定时一次
int main() {
// 注册信号捕捉
// signal(SIGALRM, SIG_IGN);
// signal(SIGALRM, SIG_DFL);
// void (*sighandler_t)(int); 函数指针,int类型的参数表示捕捉到的信号的值。
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); // 非阻塞的
printf("定时器开始了...\\n");
if(ret == -1) {
perror("setitimer");
exit(0);
}
getchar();
return 0;
}