信号概述

【摘自《Linux/Unix系统编程手册》】

概述

信号是事件发生时对进程的通知机制。有时也称之为软件中断。信号和硬件中断的类似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。

一个(具有合适权限的)进程能够向另一个进程发送信号。信号的这一用法可作为一种同步技术,甚至是进程间通信(IPC)的原始形式。进程也可以向自身发送信号。然而,发往进程的诸多信号,通常都源于内核。

针对每个信号,都定义了一个唯一的(小)整数,从1开始顺序展开。<signal.h>以SIGxxxx形式的符号名对这些整数做了定义。

信号分为两大类:第一类,一组用于内核向进程通知事件;第二类,一组实时信号。

信号因某些事件而产生,信号产生后,会于稍后被传递给某一进程,而进程也会采取某些措施来响应信号。在产生和到达期间,信号处于等待(pending)状态。

通常,一旦内核接下来要调度该进程运行,等待信号会马上送达,或者如果进程正在运行,则会立即传递信号(例如,进程向自身发送信号)。然而,有时需要确保一段代码不为传递来的信号中断。为了做到这一点,可以将信号添加到进程的信号掩码中——目前会阻塞该组信号的到达。如果产生的信号属于阻塞之列,那么信号将保持等待状态,直至稍后对其解除阻塞(从信号掩码中移除)。进程可使用各种系统调用对其信号掩码添加和移除信号。

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

      名     称                   信   号   值                                           描                                               述                                                   SUSv3 默认
SIGABRT 6 中止进程 core
SIGALRM 14 实时定时器过期 term
SIGBUS 7(SAMP = 10) 内存访问错误 core
SIGCHLD 17(SA=20,MP=18) 终止或停止子进程 ignore
SIGCONT 18(SA=19,M=25,P=26) 若停止则继续 cont
SIGEMT undef(SAMP=7) 硬件错误   term
SIGFPE 8 算术异常 core
SIGHUP 1 挂起 term
SIGILL 4 非法指令 core
SIGINT 2 终端中断 term
SIGIO 29(SA=23,MP=22) I/O时可能产生 term
SIGPOLL        
SIGKILL 9 必杀(确保杀死) term
SIGPIPE 13 管道断开 term
SIGPROF 27(M=29,P=21) 性能分析定时器过期 term
SIGPWR 30(SA=29,MP=19) 电量行将耗尽   term
SIGQUIT 3 终端退出 core
SIGSEGV 11 无效的内存引用 core
SIGSTKFLT 16(SAM=undef,P=36) 协处理器栈错误   term
SIGSTOP 19(SA=17,M=23,P=24) 确保停止 stop
SIGSYS 31(SAMP=12) 无效的系统调用 core
SIGTERM 15 终止进程 term
SIGTRAP 5 跟踪/断点陷阱 core
SIGTSTP 20(SA=18,M=24,P=25) 终端停止 stop
SIGTTIN 21(M=26,P=27) 后台进程组从终端读取 stop
SIGTTOU 22(M=27,P=28) 后台进程组向终端写 stop
SIGURG 23(SA=16,M=21,P=29) 套接字上的紧急数据 ignore
SIGUSR1 10(SA=30,MP=16) 用户自定义信号1 term
SIGUSR2 12(SA=31,MP=17) 用户自定义信号2 term
SIGVTALRM 26(M=28,P=20) 虚拟定时器过期 term
SIGWINCH 28(M=20,P=23) 终端窗口尺寸发生变化   ignore
SIGXCPU 24(M=30,P=33) 突破对CPU时间的限制 core
SIGXFSZ 25(M=31,P=34) 突破对文件大小的限制 core
原文地址:https://www.cnblogs.com/jingyg/p/5179339.html