Linux中的简单信号程序

在linux中信号9和19不可忽略;

可使用kill -l来查看所有信号,共有64个;

一个简单的捕获信号例子,用来模拟中断

include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>

#define ERR_EXIT(m) \
        do \
        { \
                perror(m); \
                exit(EXIT_FAILURE); \
        } while (0)

void handler(int sig);
int main(int argc, char *argv[])
{
        //old signal
        __sighandler_t oldhandler;
        //creat signal with "Ctrl + C"
        oldhandler = signal(SIGINT, handler);
        if (oldhandler == SIG_ERR)
                ERR_EXIT("signal error");

        //whatever "char" input
        while (getchar() != '\n')
                ;
        //reset signal to orignal
        if (signal(SIGINT, oldhandler) == SIG_ERR)
                ERR_EXIT("signal error");
        for (;;);
        return 0;
}

void handler(int sig)
{
        printf("recv a sig=%d\n", sig);
}

运行上面的程序:

一开始加入了一个SIGINT信号(可以从键盘ctrl + C来输入);

当输入ctrl + c时,打印收到的信号,如下所示:

[root@localhost signal]# ./01signal 
^Crecv a sig=2
^Crecv a sig=2
^Crecv a sig=2
^Crecv a sig=2
^Crecv a sig=2

当随意输入一个字符后,信号恢复之前的设置,再次按下ctrl+c就没有输出了;

^Crecv a sig=2
^Crecv a sig=2
^Crecv a sig=2
^Crecv a sig=2
^Crecv a sig=2
g






^C

按下ctrl+c就没有反映了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值