L'exécution kill -l
sous Linux donne:
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'est-il arrivé à 32
et 33
? Pourquoi n'est-il pas répertorié? Ils auraient pu commencer à 1 et se terminer à 62 au lieu de sauter 2 au milieu?
Réponses:
C'est à cause de NPTL . Comme il fait partie de la bibliothèque GNU C, presque toutes les distributions Linux modernes n'utilisent plus les deux premiers signaux en temps réel. NPTL est une implémentation des threads POSIX . NPTL utilise en interne les deux premiers signaux en temps réel.
Cette partie de la page de manuel du signal est très intéressante:
J'ai également vérifié le code source de la glibc; voir ligne 22 .
__SIGRTMIN
est augmenté de +2, de sorte que les deux premiers signaux en temps réel sont exclus de la plage des signaux en temps réel.la source
Parce que les signaux sont:
Aucun d'eux n'est pris en charge sous Linux. (LWP signifie LightWeight Process )
Source: IBM DeveloperWorks Solaris to Linux Porting Guide
la source
Real-time Signals
section.kill -l
RTMIN
commence à 34, pas 32 selon votre document référencé. Celui-ci dit qu'il commence à 33, mais continue en disant que vous ne devriez pas les référencer par des nombres car les nombres peuvent varier en fonction de l'implémentation du thread glibc.SIGRTMIN
ensemble avec une#define
ligne parce que ce nombre est susceptible d'être modifié ultérieurement lors de l'exécution de l'exécutable. Cela se serait révélé il y a quelques années lorsque les deux bibliothèques pthread étaient utilisées si une application compilée avec l'une des bibliothèques pthread était exécutée sur un système qui avait été redémarré avec l'autre!