`kill -l`이 32와 33의 신호 번호를 나열하지 않는 이유는 무엇입니까? kill -l리눅스에서 실행 하면 다음이 제공됩니다. 1)

kill -l리눅스에서 실행 하면 다음이 제공됩니다.

 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

무슨 일이 일어난 3233? 목록에없는 이유는 무엇입니까? 그들은 중간에 2를 건너 뛰는 대신 1에서 시작하여 62에서 끝날 수 있었습니까?



답변

NPTL 때문입니다 . GNU C 라이브러리의 일부이기 때문에 거의 모든 최신 Linux 배포판은 더 이상 처음 두 실시간 신호를 사용하지 않습니다. NPTL은 POSIX Threads 의 구현입니다 . NPTL은 처음 두 실시간 신호를 내부적으로 사용합니다.

신호 맨 페이지 의이 부분 은 매우 흥미 롭습니다.

Linux 커널은 33에서 64까지 다양한 32 개의 실시간 신호를 지원합니다. 그러나 glibc POSIX 스레드 구현은 내부적으로 2 개의 (NPTL의 경우) 또는 3 개의 (LinuxThreads의) 실시간 신호를 사용합니다 (pthreads (7) 참조). SIGRTMIN의 값을 적절하게 (34 또는 35로) 조정합니다. 사용 가능한 실시간 신호의 범위는 glibc 스레딩 구현에 따라 다르며 (이 변형은 사용 가능한 커널 및 glibc에 따라 런타임에 발생할 수 있음) 실제로 실시간 신호의 범위는 UNIX 시스템에 따라 다릅니다. 하드 코딩 된 숫자를 사용하여 실시간 신호를 참조하지 말고 대신 SIGRTMIN + n 표기법을 사용하여 실시간 신호를 참조해야하며 SIGRTMIN + n이 SIGRTMAX를 초과하지 않는 적절한 (런타임) 검사를 포함해야합니다.

또한 glibc의 소스 코드를 확인했습니다. 22 행을 참조하십시오 . __SIGRTMIN+2가 증가하므로 처음 두 실시간 신호는 실시간 신호 범위에서 제외됩니다.


답변

신호는 다음과 같습니다.

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

둘 다 Linux에서 지원되지 않습니다. (LWP는 LightWeight Process의 약자 )

소스 : IBM DeveloperWorks Solaris에서 Linux 로의 포팅 안내서


답변