本文共 1033 字,大约阅读时间需要 3 分钟。
信号是软件中断,很多比较重要的应用程序都需要处理信号。信号是一种进程之间或者内核与进程间异步通信的一种机制,例如:用户在终端键入中断键,会通过信号机制停止一个程序。每个信号都有一个名字(以SIG开头),例如,SIGABRT是夭折信号,当进程调用abort函数是产生这种信号;SIGALRM是闹钟信号,有alarm函数设置的定时器超时后将产生这种信号。在头文件signal.h中,信号名都被定义为正整数常量(信号编号)。不存在编号为0的信号,kill函数对信号编号0有特殊的用途。
在终端,我们可以使用命令kill -l 查看所有的signal信号。信号是异步事件的经典实例,产生信号的事件是随机出现的,进程不能够通过简单地测试一个变量来判断是否发生一个信号,而是必须告诉内核“在此信号发生时,请执行下列操作”。
在某信号出现时,可以告诉内核按下列3种方式之一进行处理,我们称之为信号的处理或信号的相关动作。下图中列出了所有信号的名字,说明了哪些系统支持此信号以及这些信号的系统默认动作。在“默认动作”列中,“终止+core”表示在进程当前工作目录的core文件中复制该进程的存储映像。大多数UNIX调试程序都使用core文件以检查进程终止时的状态。