posix实时信号

来源:互联网 发布:卫星电视 网络电视 编辑:程序博客网 时间:2024/05/22 09:43

/*********************************************************************
 * Author  : Samson
 * Date    : 04/25/2012
 * Test platform:
 *               GNU Linux version 2.6.29.4
 *               gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)

 * *******************************************************************/

信号可划分为两个大组:
0、其值在SIGRTMIN和SIGRTMAX之间(包括两者在内)的实时信号。POSIX要求至少提供RTSIG_MAX种实时信号,而该常值的最小值为8.
1、所有其他信号:SIGALRM、SIGINT、SIGKILL等等。

当接收到某个信号的进程其sigaction调用中是否指定了新的SA_SIGINFO标志,会造成以下的差异:

0、SA_SIGINFO指定时:SIGRTMIN到SIGRTMAX信号的实时行为有保证 而所有其他信号的行为没有保证

1、SA_SIGINFO没有指定时所有信号的实时行为都没有保证。

就这种情况来看,若需要实时行为,我们就得使用SIGRTMIN和SIGRTMAX之间的新的实时信号,而且在安装信号处理程序时必须给sigaction指定SA_SIGINFO标志。

术语实时行为(realtime behavior)隐含着如下特征:
0、信号是排队的。也即是说若同一信号产生了三次,它就递交三次。另外,一种给定信号的多次发生以先进先出(FIFO)顺序排队。对于不排队的信号来说,产生了三次的某种信号可能只递交一次。
1、当有多种SIGRTMIN到SIGRTMAX范围内的解阻塞信号排队时,值较小的信号先于值较大的信号递交 。即是说:SIGRTMIN比值为SIGRTMIN+1的信号“更为优先”。
2、当某个非实时信号递交时,传递给它的信号处理程序的唯一参数是该信号的值。实时信号比其他信号传递更多的信息。