如何在執行時建立 SIGRTMIN?
繼續閱讀
signal(7)
我現在可以看到:兩個,但是一次:三個;超過 31 的信號編號保留供實時信號系統使用,不應使用:實時信號
Linux 支持最初在 POSIX.1b 實時擴展中定義的實時信號(現在包含在 POSIX.1-2001 中)。支持的實時信號範圍由宏
SIGRTMIN
和SIGRTMAX
. POSIX.1-2001 要求實現至少支持POSIX_RTSIG_MAX(8)
實時信號。Linux 核心支持 32 種不同的實時信號,編號為 33 到 64。但是,
glibc
POSIX 執行緒實現內部使用兩個(對於 NPTL)或三個(對於 LinuxThreads)實時信號(參見 參考資料pthreads(7)
),並調整值適當的SIGRTMIN
(到 34 或 35)。因為可用實時信號的範圍因glibc
執行緒實現而異(根據可用的核心和 glibc,這種變化可能發生在執行時),而且實際上實時信號的範圍在 UNIX 系統中有所不同,程序不應該使用硬編碼數字來指代實時信號,但應始終使用符號 來指代實時信號SIGRTMIN+n
,並包括SIGRTMIN+n
不超過的適當(執行時)檢查SIGRTMAX
.那麼,當程序執行時,如何確定 SIGRTMIN 的值(在需要為其自身和任何子級設置信號處理的 C 程序中)?我在這裡查看了問題和答案,但他們似乎都認為
SIGRTMIN
這是頁面上說不應該這樣做的#define SIGRTMIN 34
時候!man
愚蠢的是,我忘記了
#define
d 的東西不是恆定的,除非它們是這樣寫的!正如@RuiFRibeiro在底部
/usr/include/
特定於體系結構的/bits/signum.h
包含文件中指出的那樣,是一對提供所需內容的 MACROS:#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)
所以現在我知道如何防止信號處理程序被嘗試替換那些保留的處理程序 - 我懷疑任何嘗試都會被拒絕,但是對於錯誤報告,最好知道限制是什麼,而不是從一個爛中確定它們看看方法!