如果您在bash和探测信号中输入kill -l
。
32和33杀死信号发生了什么?
答案 0 :(得分:2)
POSIX realtime signals选项定义了一组从SIGRTMIN
到SIGRTMAX
的信号,这些信号具有各种有用的属性(例如,它们具有明确定义的传送优先级 - 首先是最低信号编号 - 并且可以通过sigqueue()
将相同信号的多个实例排队,并与参数相关联。这些是由内核使用32号以上的信号编号实现的。
但是POSIX不要求SIGRTMIN
和SIGRTMAX
是用户域代码的编译时常量,而在GNU libc中它们不是:如果你使用用户放置源文件 - 通过预处理器登陆<signal.h>
(例如,使用gcc -E
),您会看到SIGRTMIN
实际扩展为(__libc_current_sigrtmin())
。
implementation of this inside glibc保留至少内核支持的前两个值用于其内部目的。第一个(最高优先级的此类信号)用于支持线程取消处理;第二个用于与setuid
的实现相关的事情。 (见here。我不确定在什么情况下利用分配更多信号供内部使用的能力。)
因此,缺少的信号编号是由于bash
显示应用程序对可用信号的视图(省略了glibc内部使用的信号),而不是内核的视图。
答案 1 :(得分:1)
这不是Centos的重点。在archlinux上我有:
$ 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
正如您所看到的,31
以上的信号始终是相同的信号SIGRTMAX
,但有一些变化。
此外,在源文件/usr/include/asm/signal.h
上我们找到了:
#define NSIG 32
typedef unsigned long sigset_t;
#endif /* __ASSEMBLY__ */
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL SIGIO
/*
#define SIGLOST 29
*/
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED 31
/* These should not be considered constants from userland. */
#define SIGRTMIN 32
#define SIGRTMAX _NSIG
这证实了SIGRTMIN
&amp; SIGRTMAX
是最大的信号,并且都具有32
值。
man 7 signals