Linux信号使用及自定义信号

时间:2024-01-20 17:52:45

linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html

linux信号、值及解释:https://blog.csdn.net/luotuo44/article/details/16799607

信号处理:https://wiki.jikexueyuan.com/project/cplusplus/signal-handling.html

没什么kill -l没有32 33 http://www.kbase101.com/question/30858.html

__SIGRTMIN 和 SIGRTMIN:

两个是不同的,SIGRTMIN在 __SIGRTMIN 基础上+2

执行 kill -l  会列出了下信号

 ) SIGHUP     ) SIGINT     ) SIGQUIT     ) SIGILL     ) SIGTRAP
) SIGABRT ) SIGBUS ) SIGFPE ) SIGKILL ) SIGUSR1
) SIGSEGV ) SIGUSR2 ) SIGPIPE ) SIGALRM ) SIGTERM
) SIGSTKFLT ) SIGCHLD ) SIGCONT ) SIGSTOP ) SIGTSTP
) SIGTTIN ) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ
) SIGVTALRM ) SIGPROF ) SIGWINCH ) SIGIO ) SIGPWR
) SIGSYS ) SIGRTMIN ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX

注意没有32 33

这是因为NPTL。由于它是GNU C库的一部分,几乎每个现代Linux发行版都不再使用前两个实时信号了。 NPTL是POSIX Threads的实现。 NPTL内部使用前两个实时信号。

信号手册页的这一部分非常有趣:

Linux内核支持32种不同的实时信号,
  编号为33到64.但是,glibc POSIX线程实现
  内部使用两个(对于NPTL)或三个(对于LinuxThreads)实时
  信号(参见pthreads(7)),并适当调整SIGRTMIN的值
  (到34或35)。因为可用的实时信号范围不同
  根据glibc线程实现(和这种变化
  可以在运行时根据可用的内核和glibc)发生,
  实际上,实时信号的范围因UNIX系统而异,
  程序绝不应该使用硬编码来引用实时信号
  数字,但应始终使用的是实时信号
  符号SIGRTMIN + n,并包括适当的(运行时)检查
  SIGRTMIN + n不超过SIGRTMAX。

检查了glibc的源代码;参见第22行。 __SIGRTMIN增加了+2,因此前两个实时信号被排除在实时信号范围之外。