런타임에 SIGRTMIN을 설정하는 방법은 무엇입니까?

런타임에 SIGRTMIN을 설정하는 방법은 무엇입니까?

계속 읽어보면 signal(7)알 수 있습니다: 2개, 그러나 한 번: 3개는 실시간 신호 시스템용으로 예약되어 있으므로 사용해서는 안 됩니다.

실시간 신호

Linux는 원래 POSIX.1b 실시간 확장(현재 POSIX.1-2001에 포함됨)에 정의된 실시간 신호를 지원합니다. 지원되는 실시간 신호의 범위는 SIGRTMIN매크로 및 에 의해 정의됩니다 SIGRTMAX. POSIX.1-2001에서는 최소한 POSIX_RTSIG_MAX(8)실시간 신호를 지원하는 구현이 필요합니다.

Linux 커널은 33번부터 64번까지 번호가 매겨진 32개의 실시간 신호를 지원합니다. 그러나 glibcPOSIX 스레드 구현은 내부적으로 2개(NPTL의 경우) 또는 3개(LinuxThreads의 경우) 실시간 신호(참고자료 참조 pthreads(7))를 사용하여 값을 적절하게 SIGRTMIN(34 또는 35로) 조정합니다. 사용 가능한 실시간 신호의 범위는 glibc스레드 구현에 따라 변경되고(이 변경은 사용 가능한 커널 및 glibc에 따라 런타임에 발생할 수 있음) 실제로 실시간 신호의 범위는 UNIX 시스템마다 다르기 때문에 프로그램은 ~해야 한다라이브 신호를 참조하기 위해 하드 코딩된 숫자를 사용하지 마십시오.그러나 항상 기호를 사용하여 라이브 신호를 참조하고 SIGRTMIN+n이를 초과하지 않는 적절한(런타임) 검사를 포함해야 합니다.SIGRTMIN+nSIGRTMAX

그렇다면 프로그램이 실행 중일 때(자체 및 하위 항목에 대한 신호 처리를 설정해야 하는 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)

이제 신호 처리기가 남아 있는 처리기로 교체되는 것을 방지하는 방법을 알았습니다. 모든 시도가 거부될 것이라고 생각합니다. 그러나 버그 보고의 경우 한계를 확인하려고 애쓰는 것보다 한계가 무엇인지 아는 것이 더 낫습니다. 어떻게 !

관련 정보