32和33杀死信号发生了什么?

时间:2012-10-01 20:32:05

标签: linux bash kill

如果您在bash和探测信号中输入kill -l

32和33杀死信号发生了什么?

2 个答案:

答案 0 :(得分:2)

POSIX realtime signals选项定义了一组从SIGRTMINSIGRTMAX的信号,这些信号具有各种有用的属性(例如,它们具有明确定义的传送优先级 - 首先是最低信号编号 - 并且可以通过sigqueue()将相同信号的多个实例排队,并与参数相关联。这些是由内核使用32号以上的信号编号实现的。

但是POSIX不要求SIGRTMINSIGRTMAX是用户域代码的编译时常量,而在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

中有关信号的更多信息