Por que 'kill -l' não lista números de sinal de 32 e 33?

18

A execução de kill -l no linux fornece:

 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

O que aconteceu com 32 e 33 ? Por que não está listado? Eles poderiam ter começado em 1 e terminado em 62, em vez de pular 2 no meio?

    
por user2555595 16.09.2014 / 10:26

2 respostas

20

É por causa do NPTL . Como faz parte da biblioteca GNU C , quase toda distribuição moderna de linux não usa mais os dois primeiros sinais em tempo real. . O NPTL é uma implementação dos Threads POSIX . O NPTL faz uso interno dos dois primeiros sinais em tempo real.

Esta parte da página do sinal é muito interessante:

The Linux kernel supports a range of 32 different real-time signals, numbered 33 to 64. However, the glibc POSIX threads implementation internally uses two (for NPTL) or three (for LinuxThreads) real-time signals (see pthreads(7)), and adjusts the value of SIGRTMIN suitably (to 34 or 35). Because the range of available real-time signals varies according to the glibc threading implementation (and this variation can occur at run time according to the available kernel and glibc), and indeed the range of real-time signals varies across UNIX systems, programs should never refer to real-time signals using hard-coded numbers, but instead should always refer to real-time signals using the notation SIGRTMIN+n, and include suitable (run-time) checks that SIGRTMIN+n does not exceed SIGRTMAX.

Eu também verifiquei o código fonte para glibc; veja linha 22 . __SIGRTMIN é aumentado em +2, portanto, os dois primeiros sinais em tempo real são excluídos do intervalo de sinais em tempo real.

    
por 16.09.2014 / 12:23
10

Porque os sinais são:

SIGWAITING 32 Ignore All LWPs blocked 
    SIGLWP 33 Ignore Virtual Interprocessor Interrupt for Threads Library 

Nenhum deles é suportado no Linux. (LWP significa LightWeight Process )

Origem: Guia de Portabilidade do IBM DeveloperWorks Solaris para Linux

    
por 16.09.2014 / 11:34