Ejecutar kill -l
en Linux da:
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
¿Qué pasó con 32
y 33
? ¿Por qué no está en la lista? ¿Podrían haber comenzado en 1 y terminar en 62 en lugar de saltarse 2 en el medio?
Respuestas:
Es por NPTL . Dado que es parte de la biblioteca GNU C, casi todas las distribuciones modernas de Linux ya no usan las dos primeras señales en tiempo real. NPTL es una implementación de los hilos POSIX . NPTL hace uso interno de las dos primeras señales en tiempo real.
Esta parte de la página de manual de señales es muy interesante:
También verifiqué el código fuente de glibc; ver línea 22 .
__SIGRTMIN
se incrementa +2, por lo que las dos primeras señales en tiempo real se excluyen del rango de señales en tiempo real.fuente
Porque las señales son:
Ninguno de los cuales es compatible con Linux. (LWP son las siglas de LightWeight Process )
Fuente: Guía de transferencia de IBM DeveloperWorks Solaris a Linux
fuente
Real-time Signals
sección.kill -l
RTMIN
comienza en 34, no en 32 según el documento de referencia. Este dice que comienza en 33, pero continúa diciendo que no debe hacer referencia a ellos por números, ya que los números pueden variar dependiendo de la implementación de subprocesos glibc.SIGRTMIN
conjunto con una#define
línea porque ese número está sujeto a posibles cambios más tarde cuando se ejecuta el ejecutable. ¡Esto habría aparecido hace unos años cuando ambas bibliotecas pthread estaban en uso si una aplicación compilada contra una biblioteca pthread se ejecutara en un sistema que se había reiniciado con la otra!