日期:2014-05-16  浏览次数:20766 次

关于实时信号的一点疑问,请赐教
最近看《深入理解Linux内核》信号一章时有以下疑问:

信号分为普通信号和实时信号,普通信号的编号是1-31,每一个都有其固定的含义,那么实时信号32-64这32个信号是否都有固定含义?

还是内核没有定义,需要用户空间的应用程序自己定义?

哪位大侠帮忙解答一下,顺便在说一个实时信号的应用场景,多谢!


书上仅是一句话带过,没看明白:
“尽管Linux内核不使用实时信号,他还是通过几个特定的系统调用完全实现了POSIX标准(这里指对实时信号的支持)”



------解决方案--------------------
别光看理论, 自己看看manpage, 多开发点应用程序。

This header shall also declare the macros SIGRTMIN and SIGRTMAX, which evaluate to integer expressions, and specify a range of signal numbers
that are reserved for application use and for which the realtime signal behavior specified in this volume of IEEE Std 1003.1-2001 is supported.
The signal numbers in this range do not overlap any of the signals specified in the following table.

The range SIGRTMIN through SIGRTMAX inclusive shall include at least {RTSIG_MAX} signal numbers.

It is implementation-defined whether realtime signal behavior is supported for other signals.

实时信号和非实时信号的区别就是, 实时信号不会丢失, 比如一个线程阻塞A信号, 然后你投递5次A信号到线程, 那么如果A是非实时信号, 那么后面4个都丢失了, 只留下第一个。 如果投递的是实时信号, 那么5个都保留。

[root@vps616 python]# kill -l
 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

从32开始都是实时信号的范围了。