signal信号和sigaction信号处理机制

本文详细介绍了信号处理机制,包括signal函数和sigaction函数的使用。通过对信号捕获机制的分析,展示了如何注册信号处理函数以及处理不同情况下的信号响应。示例代码展示了对SIGINT信号的不同处理方式,强调了在不同场景下选择合适信号处理机制的重要性。
摘要由CSDN通过智能技术生成

1. signal信号处理机制

可以用函数signal注册一个信号捕捉函数。原型为:

#include 
    typedef void (*sighandler_t)(int);
    sighandler_t signal(int signum, sighandler_t handler);

   signal的第1个参数signum表示要捕捉的信号,第2个参数是个函数指针,表示要对该信号进行捕捉的函数,该

参数也可以是 SIG_DEF(表示交由系统缺省处理,相当于白注册了)或SIG_IGN(表示忽略掉该信号而不做任何处

理)。signal如果调用成功,返回以前该信 号的处理函数的地址,否则返回SIG_ERR。

   sighandler_t是信号捕捉函数,由signal函数注册,注册以后,在整个进程运行过程中均有效,并且对不

同的信号可以注册同一个信号捕捉函数。该函数只有一个参数,表示信号值。

   示例:

捕捉终端CTRL+c产生的SIGINT信号:

#include 
#include 
#include 
#include
void SignHandler(int iSignNo)
{
    printf("Capture sign no:%d\n",iSignNo);
}
int main()
{
    signal(SIGINT,SignHandler);
    while(true)
        sleep(1);
    return 0;
}

该程序运行起来以后,通过按CTRL+c将不再终止程序的运行。应为CTRL+c产生的SIGINT信号已经由进程中注

册的SignHandler函数捕 捉了。该程序可以通过Ctrl+\终止,因为组合键Ctrl+\能够产生SIGQUIT信号,而该信

号的捕捉函数尚未在程序中注册。

忽略掉终端CTRL+c产生的SIGINT信号:

#include 
#include 
#include 
#include
int<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值