Linux 信号列表

图片来源:https://www.pixiv.net/artworks/65838500

term 表示信号终止进程,core 表示进程产生核心转储文件并退出,ignore 表示忽略该信号,stop 表示信号停止了进程,cont 表示信号恢复了一个已停止的进程

信号信号值(x86)默认行为描述触发场景
SIGABRT / SIGIOT6core进程终止信号进程调用 abort()函数时,系统向进程发送该信号
SIGALRM14term实时定时器过期调用 alarm()setitimer()而设置的实时定时器到期,内核将产生该信号
SIGBUS7(不可移植)core内存访问错误使用由 mmap()所创建的内存映射时,如果试图访问的地址超出了底层内存映射文件的结尾,那么将产生该错误
SIGCHLD17(不可移植)ignore子进程终止、暂停、继续子进程终止、子进程因收到信号而停止或恢复时向父进程发送该信号
SIGCONT18(不可移植)cont如果被暂停,重新继续执行将该信号发送给已停止的进程,进程将会恢复运行。当接收信号的进程当前不处于停止状态时,默认情况下将忽略该信号
SIGEMT未定义term硬件错误UNIX 系统通常用该信号来标识一个依赖于实现的硬件错误。Linux 系统仅在 Sun SPARC 实现中使用了该信号
SIGFPE8core算术异常在 x86-32 架构中,整数除以 0 总是产生 SIGFPE 信号,但是对浮点数除以 0 的处理则取决于是否启用了 FE_DIVBYZERO 异常。如果启用了该异常(使用feenableexcept()),那么浮点数除以 0 也将产生 SIGFPE 信号,否则,将为操作数产生符合 IEEE 标准的结果(无穷大的浮点表示形式)。
SIGHUP1term挂起检测到控制终端挂起或者控制进程死亡时,进程会收到 SIGHUP。许多守护进程会在收到 SIGHUP 信号时重新进行初始化并重读配置文件。nohup 命令用于无视该信号
SIGILL4core非法的指令如果进程试图执行非法(即格式不正确)的机器语言指令,系统将向进程发送该信号
SIGINT2term终端中断信号当用户键入终端中断字符(通常为 Ctrl-C)时,终端驱动程序将发送该信号给前台进程组
SIGKILL9term杀死 此信号为“必杀(sure kill)”信号,处理器程序无法将其阻塞、忽略或者捕获,故而“一击必杀”,总能终止进程
SIGIO / SIGPOLL29(不可移植)termI/O 时可能产生利用 fcntl()系统调用,即可于特定类型(诸如终端和套接字)的打开文件描述符发生 I/O 事件时产生该信号
SIGPIPE13term管道断开当某一进程试图向管道、FIFO 或套接字写入信息时,如果这些设备并无相应的阅读进程,那么系统将产生该信号
SIGPROF27(不可移植)term性能调优定时器超时setitimer()调用所设置的性能分析定时器到期时,内核产生该信号。性能分析定时器用于记录进程所使用的 CPU 时间。与虚拟定时器不同,性能分析定时器在对 CPU 时间计数时会将用户态与内核态都包含在内
SIGPWR30(不可移植)term电量将耗尽这是电源故障信号。当系统配备有不间断电源(UPS)时,可以设置守护进程来监控电源发生故障时备用电池的剩余电量。如果电池电量行将耗尽(长时间停电之后),那么监控进程会将该信号发往 init 进程,而后者则将其解读为快速、有序关闭系统的一个请求
SIGQUIT3core终端退出信号当用户在键盘上键入退出字符(通常为 Ctrl-\)时,该信号将发往前台进程组。默认情况下,该信号终止进程,并生成可用于调试的核心转储文件
SIGSEGV11core非法的内存引用当应用程序对内存的引用无效时,就会产生该信号,如引用的页不存在、试图更新只读内存中某一位置的内容、在用户态访问内核的部分内存。C 语言中引发这些事件的往往是解引用的指针里包含了错误地址(例如,未初始化的指针)
SIGSTKFLT16(不可移植)term协处理器栈错误Linux 对该信号作了定义,但并未使用
SIGSTOP19(不可移植)stop暂停执行这是一个必停啊(sure stop)信号,处理器程序无法将其阻塞、忽略或者捕获,故而总是能停止进程
SIGSYS  / SIGUNUSED31(不可移植)core无效的系统调用如果进程发起的系统调用有误,那么将产生该信号。这意味着系统将进程执行的指令视为一个系统调用陷阱(trap),但相关的系统调用编号却是无效的
SIGTERM  15term终止信号这是用来终止进程的标准信号,也是 killkillall 命令所发送的默认信号。精心设计的应用程序应当为 SIGTERM 信号设置处理器程序,以便于其能够预先清除临时文件和释放其他资源。发送 SIGKILL 信号可以杀掉某个进程,从而绕开了 SIGTERM 信号的处理器程序。因此,总是应该首先尝试使用 SIGTERM 信号来终止进程,而把 SIGKILL 信号作为最后手段
SIGTRAP5core追踪/断点陷阱该信号用来实现断点调试功能以及 strace 命令所执行的跟踪系统调用功能
SIGTSTP20(不可移植)stop终端中止信号这是作业控制的停止信号,当用户在键盘上输入挂起字符(通常是 Ctrl-Z)时,将发送该信号给前台进程组,使其停止运行
SIGTTIN21(不可移植)stop后台进程尝试读在作业控制 shell 下运行时,若后台进程组试图对终端进行 read()操作,终端驱动程序将向该进程组发送此信号
SIGTTOU22(不可移植)stop后台进程尝试写在作业控制 shell 下运行时,如果对终端启用了 TOSTOP 选项(可能是通过 stty tostop 命令),而某一后台进程组试图对终端进行 write()操作,那么终端驱动程序将向该进程组发送 SIGTTOU 信号
SIGURG23(不可移植)ignore套接字上的紧急数据系统发送该信号给一个进程,表示套接字上存在带外(也称作紧急)数据
SIGUSR110(不可移植)term用户自定义信号1该信号和 SIGUSR2 信号供程序员自定义使用。内核绝不会为进程产生这些信号。进程可以使用这些信号来相互通知事件的发生,或是彼此同步
SIGUSR212(不可移植)term用户自定义信号2同 SIGUSR1
SIGVTALRM26(不可移植)term虚拟定时器超时调用 setitimer()设置的虚拟定时器刚一到期,内核就会产生该信号。虚拟定时器计录的是进程在用户态所使用的 CPU 时间
SIGXCPU24(不可移植)core超出CPU时间限制当进程的 CPU 时间超出对应的资源限制时,将发送此信号给进程
SIGXFSZ25(不可移植)core超出文件大小限制如果进程因试图增大文件(调用 write()truncate())而突破对进程文件大小的资源限制,发送此信号给进程
SIGWINCH28(不可移植)ignore终端窗口大小已变化在窗口环境中,当终端窗口尺寸发生变化时(要么是由于用户手动调整了大小,要么是因为程序调用 ioctl()对大小做了调整),借助于为该信号安装的处理器程序,诸如 vi 和 less 之类的程序会在窗口尺寸调整后重新绘制输出。

参考:

Unix信号——维基百科

《Linux/Unix 系统编程手册》

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注