Linux支持POSIX可靠信号(以下称“标准信号”)和POSIX实时信号。
标准信号
Linux支持下面列出的标准信号。几个信号编号取决于架构,如“值”列中所示。 (给出三个值,第一个通常对alpha和sparc有效,中间一个对i386,ppc和sh,最后一个对mips有效。
A - 表示相应架构上不存在信号。)
表的“Action”列中的条目指定信号的默认操作,如下所示:
术语
默认操作是终止进程。
IGN
默认操作是忽略该信号。
核心
默认操作是终止进程并转储核心。
停止
默认操作是停止该过程。
首先是原始POSIX.1标准中描述的信号。
| 信号 | 值 | 行动 | 评论 |
| 或控制过程的死亡 | |||
| SIGINT | 2 | 术语 | 键盘中断 |
| SIGQUIT | 3 | 核心 | 从键盘退出 |
| SIGILL | 4 | 核心 | 非法指令 |
| SIGABRT | 6 | 核心 | 中止信号 退出 (3) |
| SIGFPE | 8 | 核心 | 浮点异常 |
| SIGKILL | 9 | 术语 | 杀死信号 |
| SIGSEGV | 11 | 核心 | 无效的内存引用 |
| SIGPIPE | 13 | 术语 | 断管:写入没有读卡器的管道 |
| SIGALRM | 14 | 术语 | 定时器信号来自 报警 (2) |
| SIGTERM | 15 | 术语 | 终止信号 |
| SIGUSR1 | 30,10,16 | 术语 | 用户定义的信号1 |
| SIGUSR2 | 31,12,17 | 术语 | 用户定义的信号2 |
| SIGCHLD | 20,17,18 | IGN | 孩子停止或终止 |
| SIGCONT | 19,18,25 | 如果停止则继续 | |
| SIGSTOP | 17,19,23 | 停止 | 停止进程 |
| SIGTSTP | 18,20,24 | 停止 | 停止输入tty |
| SIGTTIN | 21,21,26 | 停止 | 用于后台进程的tty输入 |
| SIGTTOU | 22,22,27 | 停止 | tty输出用于后台进程 |
信号SIGKILL 和SIGSTOP 无法捕获,阻止或忽略。
接下来是不在POSIX.1标准中但在SUSv2和SUSv3 / POSIX 1003.1-2001中描述的信号。
| 信号 | 值 | 行动 | 评论 |
| SIGPOLL | 术语 | 可轮询事件(Sys V)。 SIGIO的同义词 | |
| SIGPROF | 27,27,29 | 术语 | 分析计时器已过期 |
| SIGSYS | 12,-,12 | 核心 | 常规的错误参数(SVID) |
| SIGTRAP | 5 | 核心 | 跟踪/断点陷阱 |
| SIGURG | 16,23,21 | IGN | 套接字的紧急情况(4.2 BSD) |
| SIGVTALRM | 26,26,28 | 术语 | 虚拟闹钟(4.2 BSD) |
| SIGXCPU | 24,24,30 | 核心 | 超出CPU时间限制(4.2 BSD) |
| SIGXFSZ | 25,25,31 | 核心 | 超出文件大小限制(4.2 BSD) |
最高级别包括Linux 2.2,默认行为SIGSYS, SIGXCPU, SIGXFSZ和(在SPARC和MIPS以外的体系结构上)SIGBUS 是终止进程(没有核心转储)。 (在其他一些Unices上的默认操作SIGXCPU 和SIGXFSZ 是在没有核心转储的情况下终止进程。)Linux 2.4符合POSIX 1003.1-2001对这些信号的要求,使用核心转储终止进程。
其他各种其他信号。
| 信号 | 值 | 行动 | 评论 |
| SIGEMT | 7,-,7 | 术语 | |
| SIGSTKFLT | -,16,- | 术语 | 协处理器堆栈故障(未使用) |
| SIGIO | 23,29,22 | 术语 | 现在可以进行I / O(4.2 BSD) |
| SIGCLD | -,-,18 | IGN | SIGCHLD的同义词 |
| SIGPWR | 29,30,19 | 术语 | 电源故障(系统V) |
| SIGINFO | 29,-,- | SIGPWR的同义词 | |
| SIGLOST | -,-,- | 术语 | 文件锁丢失 |
| SIGWINCH | 28,28,20 | IGN | 窗口调整大小信号(4.3 BSD,Sun) |
| SIGUNUSED | -,31,- | 术语 | 未使用的信号(将是SIGSYS) |
(信号29是SIGINFO / SIGPWR 在阿尔法上但是SIGLOST 在sparc上。)
SIGEMT 在POSIX 1003.1-2001中未指定,但在大多数其他Unices上出现neverthless,其默认操作通常是使用核心转储终止进程。
SIGPWR (默认情况下,在POSIX 1003.1-2001中未指定)在其出现的其他Unices上通常会被忽略。
SIGIO (在POSIX 1003.1-2001中未指定)在其他几个Unices上默认被忽略。
实时信号
Linux支持最初在POSIX.4实时扩展中定义的实时信号(现在包含在POSIX 1003.1-2001中)。 Linux支持32个实时信号,编号为32(SIGRTMIN)到63(SIGRTMAX)。 (程序应始终使用符号表示实时信号SIGRTMIN+ n,因为Unices的实时信号编号范围不同。)
与标准信号不同,实时信号没有预定义的含义:整套实时信号可用于应用定义的目的。 (但请注意,LinuxThreads实现使用前三个实时信号。)
未处理的实时信号的默认操作是终止接收过程。
实时信号的区别如下:
- 可以对多个实时信号实例进行排队。相反,如果在该信号当前被阻止的情况下传送标准信号的多个实例,则只有一个实例排队。
- 如果使用发送信号sigqueue(2),可以随信号发送伴随值(整数或指针)。如果接收进程使用,则为此信号建立处理程序SA_SIGACTION 国旗的sigaction(2)然后它可以通过获得这些数据 si_value 的领域 siginfo_t 结构作为第二个参数传递给处理程序。而且, si_pid 和 si_uid 该结构的字段可用于获得发送信号的过程的PID和实际用户ID。
- 实时信号以保证顺序传送。相同类型的多个实时信号按发送顺序传送。如果向进程发送不同的实时信号,则从编号最小的信号开始传送它们。 (即,低编号信号具有最高优先级。)
如果标准和实时信号都处于待处理状态,则POSIX将其保留为未指定的信号,并将其首先传送。与许多其他实现一样,Linux在这种情况下优先考虑标准信号。
根据POSIX,实现应该允许至少_POSIX_SIGQUEUE_MAX(32)个实时信号排队到进程。但是,Linux并未对每个进程进行限制,而是对所有进程的排队实时信号数量施加系统限制。
可以通过以下方式查看此限制(并使用权限) 的/ proc / SYS /内核/ rtsig-MAX 文件。相关文件, 的/ proc / SYS /内核/ rtsig-MAX ,可用于查明当前排队的实时信号数量。
符合
POSIX.1
重要: 使用 人 命令( % 人 )查看特定计算机上如何使用命令。




