Выполнение kill -l
на Linux дает:
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
и 33
? Почему его нет в списке? Они могли начать с 1 и закончить на 62 вместо того, чтобы пропустить 2 в середине?
Ответы:
Это из-за NPTL . Поскольку она является частью библиотеки GNU C, почти каждый современный дистрибутив Linux больше не использует первые два сигнала реального времени. NPTL - это реализация потоков POSIX . NPTL использует первые два сигнала в реальном времени.
Эта часть справочной страницы очень интересна:
Я также проверил исходный код для glibc; см линии 22 .
__SIGRTMIN
+2, поэтому первые два сигнала реального времени исключаются из диапазона сигналов реального времени.источник
Потому что сигналы:
Ни один из которых не поддерживается в Linux. (LWP расшифровывается как LightWeight Process )
Источник: Руководство по портированию IBM DeveloperWorks Solaris в Linux
источник
Real-time Signals
раздел.kill -l
RTMIN
34 начинается, а не 32, как вы ссылаетесь документ. Этот говорит, что он начинается с 33, но далее следует сказать, что вы не должны ссылаться на них по номерам, так как числа могут варьироваться в зависимости от реализации потоков glibc.SIGRTMIN
набор со#define
строкой, потому что это число может быть изменено позже при запуске исполняемого файла. Это могло бы проявиться несколько лет назад, когда использовались обе библиотеки pthread, если бы приложение, скомпилированное с одной библиотекой pthread, было запущено в системе, которая была перезагружена с другой!