2011-09-05 28 views
2

标准信号,只允许一个信号可以排队。实时信号允许多个信号可以排队。这是唯一的区别吗?或者,我们还有其他优势吗?实时信号的意义?

谢谢。

回答

2

按照signal(7) manpage,有几个不同点:

Real-time signals are distinguished by the following: 

    1. Multiple instances of real-time signals can be queued. By con- 
    trast, if multiple instances of a standard signal are delivered 
    while that signal is currently blocked, then only one instance is 
    queued. 

    2. If the signal is sent using sigqueue(2), an accompanying value 
    (either an integer or a pointer) can be sent with the signal. If 
    the receiving process establishes a handler for this signal using 
    the SA_SIGINFO flag to sigaction(2) then it can obtain this data 
    via the si_value field of the siginfo_t structure passed as the 
    second argument to the handler. Furthermore, the si_pid and si_uid 
    fields of this structure can be used to obtain the PID and real 
    user ID of the process sending the signal. 

    3. Real-time signals are delivered in a guaranteed order. Multiple 
    real-time signals of the same type are delivered in the order they 
    were sent. If different real-time signals are sent to a process, 
    they are delivered starting with the lowest-numbered signal. 
    (I.e., low-numbered signals have highest priority.) 

    If both standard and real-time signals are pending for a process, POSIX 
    leaves it unspecified which is delivered first. Linux, like many other 
    implementations, gives priority to standard signals in this case. 
0

的差异进行了总结,例如,here