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
重要: 使用 人 命令( % 人 )查看特定计算机上如何使用命令。