signal函数

注意:SIGKILLSIGSTOP不能被捕捉,不能被忽略

  • 函数方法sighandler_t signal(int signum, sighandler_t handler)

    • 功能:设置某个信号的捕捉行为
    • 参数:
      1. signum:要捕捉的信号
      2. 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;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值