2011-09-05 32 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