계속 읽어보면 signal(7)
알 수 있습니다: 2개, 그러나 한 번: 3개는 실시간 신호 시스템용으로 예약되어 있으므로 사용해서는 안 됩니다.
실시간 신호
Linux는 원래 POSIX.1b 실시간 확장(현재 POSIX.1-2001에 포함됨)에 정의된 실시간 신호를 지원합니다. 지원되는 실시간 신호의 범위는
SIGRTMIN
매크로 및 에 의해 정의됩니다SIGRTMAX
. POSIX.1-2001에서는 최소한POSIX_RTSIG_MAX(8)
실시간 신호를 지원하는 구현이 필요합니다.Linux 커널은 33번부터 64번까지 번호가 매겨진 32개의 실시간 신호를 지원합니다. 그러나
glibc
POSIX 스레드 구현은 내부적으로 2개(NPTL의 경우) 또는 3개(LinuxThreads의 경우) 실시간 신호(참고자료 참조pthreads(7)
)를 사용하여 값을 적절하게SIGRTMIN
(34 또는 35로) 조정합니다. 사용 가능한 실시간 신호의 범위는glibc
스레드 구현에 따라 변경되고(이 변경은 사용 가능한 커널 및 glibc에 따라 런타임에 발생할 수 있음) 실제로 실시간 신호의 범위는 UNIX 시스템마다 다르기 때문에 프로그램은 ~해야 한다라이브 신호를 참조하기 위해 하드 코딩된 숫자를 사용하지 마십시오.그러나 항상 기호를 사용하여 라이브 신호를 참조하고SIGRTMIN+n
이를 초과하지 않는 적절한(런타임) 검사를 포함해야 합니다.SIGRTMIN+n
SIGRTMAX
그렇다면 프로그램이 실행 중일 때(자체 및 하위 항목에 대한 신호 처리를 설정해야 하는 C 프로그램에서) SIGRTMIN 값을 어떻게 결정합니까? 여기에 있는 질문과 답변을 살펴봤지만 모두들 SIGRTMIN
페이지에 해서는 안 되는 일이라고 적혀 있는 때라고 생각하는 것 같습니다 #define SIGRTMIN 34
!man
답변1
#define
나는 그런 식으로 쓰여지지 않으면 d 항목이 일정하지 않다는 것을 어리석게도 잊어버렸습니다!
@RuiFRibeiro가 지적했듯이/usr/include/
아키텍처별/bits/signum.h
하단의 포함 파일은 필요한 것을 제공하는 매크로 쌍입니다.
#define SIGUNUSED 31
#define _NSIG 65 /* Biggest signal number + 1
(including real-time signals). */
#define SIGRTMIN (__libc_current_sigrtmin ())
#define SIGRTMAX (__libc_current_sigrtmax ())
/* These are the hard limits of the kernel. These values should not be
used directly at user level. */
#define __SIGRTMIN 32
#define __SIGRTMAX (_NSIG - 1)
이제 신호 처리기가 남아 있는 처리기로 교체되는 것을 방지하는 방법을 알았습니다. 모든 시도가 거부될 것이라고 생각합니다. 그러나 버그 보고의 경우 한계를 확인하려고 애쓰는 것보다 한계가 무엇인지 아는 것이 더 낫습니다. 어떻게 !