Linux信号(signal、sigaction) 机制分析

本文深入探讨了Linux中信号处理的两种主要机制——signal()与sigaction()的区别,以及信号分类为可靠信号与不可靠信号的概念。详细解释了如何通过sigaction()安装信号以实现信号传递,并对比了signal()函数的局限性。文章引用多个相关文档以提供具体代码实例和深入理解的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号接收最终选用此机制:

   struct sigaction act, oldact;

   act.sa_handler = sig_handler;
   act.sa_flags = 0;
   sigemptyset(&act.sa_mask);
   sigaction(SIGRTMIN+8, &act, &oldact);
   sigaction(SIGRTMIN+9, &act, &oldact);

 

对于目前linux的两个信号安装函数:signal()及sigaction()来说,它们都不能把SIGRTMIN以前的信号变成可靠信号(都不支持排队,仍有可能丢失,仍然是不可靠信号),而且对SIGRTMIN以后的信号都支持排队。这两个函数的最大区别在于,经过sigaction安装的信号都能传递信息给信号处理函数,而经过signal安装的信号不能向信号处理函数传递信息。对于信号发送函数来说也是一样的。信号值位于SIGRTMIN和SIGRTMAX之间的信号都是可靠信号,可靠信号克服了信号可能丢失的问题。

参考及有用的文档:

               http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html  (2.1、可靠信号与不可靠信号)

               http://blog.chinaunix.net/uid-20583479-id-1919898.html               (部分代码)

               http://blog.chinaunix.net/uid-1877180-id-3011232.html                 (参考)

               http://blog.chinaunix.net/uid-25100840-id-307217.html?bsh_bid=235144559   (有用)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值