Wykonanie kill -l
na Linuksie daje:
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
Co się stało 32
i 33
? Dlaczego nie ma go na liście? Mogliby zacząć od 1 i skończyć na 62 zamiast pomijać 2 w środku?
Odpowiedzi:
To z powodu NPTL . Ponieważ jest częścią biblioteki GNU C, prawie każda nowoczesna dystrybucja linuksa nie wykorzystuje już dwóch pierwszych sygnałów w czasie rzeczywistym. NPTL jest implementacją wątków POSIX . NPTL wykorzystuje wewnętrznie dwa pierwsze sygnały w czasie rzeczywistym.
Ta część strony sygnału jest bardzo interesująca:
Sprawdziłem również kod źródłowy glibc; patrz wiersz 22 .
__SIGRTMIN
jest zwiększone +2, więc pierwsze dwa sygnały w czasie rzeczywistym są wyłączone z zakresu sygnałów w czasie rzeczywistym.źródło
Ponieważ sygnały to:
Żaden z nich nie jest obsługiwany w systemie Linux. (LWP oznacza LightWeight Process )
Źródło: IBM DeveloperWorks Solaris to Linux Przewodnik po portach
źródło
Real-time Signals
sekcja.kill -l
RTMIN
początkiem od 34, a nie od 32 według dokumentu, do którego się odwołujesz. Ten mówi, że zaczyna się od 33, ale mówi dalej, że nie powinieneś odwoływać się do nich liczbami, ponieważ liczby mogą się różnić w zależności od implementacji wątków glibc.SIGRTMIN
z#define
linią, ponieważ liczba ta może ulec zmianie później, gdy plik wykonywalny zostanie uruchomiony. Pojawiłoby się to kilka lat temu, gdy obie biblioteki pthread były w użyciu, gdyby aplikacja skompilowana dla jednej biblioteki pthread została uruchomiona w systemie, który został ponownie uruchomiony z drugim!