与变量三要素(类型、名字、值)类似的,每个信号也有其必备4要素,分别是:1.编号;2.名称(即编号的宏定义) ;3.事件(引起信号产生的事件,如段错误);4.默认处理动作
可以通过man 7 signal 命令查看:
Signal Value Action Comment
──────────────────────────────────
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
名字 编号 默认处理方式 事件
重点掌握的信号:2、3、7(总线错误)、8、9、10、11、12、13、14、15、17、19和20。要求记住前三个要素(编号、名字和事件)。
在标准信号中,有一些信号是有三个“Value”,第一个值通常对alpha和sparc架构(CPU架构)有效,中间值针对x86、arm和其他架构,最后一个应用于mips架构。一个‘-’表示在对应架构上尚未定义该信号。
不同的操作系统定义了不同的系统信号。因此有些信号出现在Unix系统内,也出现在Linux中,而有的信号出现在FreeBSD或Mac OS中却没有出现在Linux下。这里我们只研究Linux系统中的信号(即只是取中间值)。
信号的默认处理方式有五种(记住):Term:终止进程;Ign:忽略信号 (默认即时对该种信号忽略操作); Core:终止进程,生成Core文件(查验进程死亡原因,用于gdb调试);Stop:停止(暂停)进程;Cont:继续运行进程。
这里特别强调9) SIGKILL 和19) SIGSTOP信号,不允许忽略和捕捉,只能执行默认动作。甚至不能将其设置为阻塞。
9) SIGKILL:无条件终止进程。本信号不能被忽略,捕捉和阻塞。默认动作为终止进程。它向系统管理员提供了可以杀死任何进程的方法。
19) SIGSTOP:停止进程的执行。信号不能被忽略,捕捉和阻塞。默认动作为暂停进程。