常见信号含义

信号的基本概念

软中断信号(signal, 又简称为信号),用来通知进程发生了异步事件。进程之间可以相互通过系统调用kill发送软终端信号。内核也可以因为内部事件而给进程发送信号,通知进程发送了某个事件。信号只是进程间通知发送了什么事件,并不给该进程传递任何数据。

收到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数,由该函数来处理。第二种方法是,忽略某个信号,对该信号不做任何处理,就像未发生过一样。第三种方法是,对该信号的处理保留系统的默认值,这种缺省操作,对大部分的信号的缺省操作是使进程终止。进程通过系统调用signal来指定进程对某个信号的处理能力。

在进程表的表象中有一个软中断信号,该域中每一位对应一个信号,当有信号发送给进程时,对应位置位。由此可以看出,进程对不同的信号可以同时保留,单对于同一个信号,进程并不知道在处理之前来过多少个。

常见的信号

程序终止(interrupt)信号,在用户键入INTR字符(通常Ctrl+C)时发出。

与SIGINT类似,但是由于QUIT字符(通常Ctrl-)来控制,进程因为受到SIGQUIT退出时会产生core文件,在这个意义上类似于这个程序错误。

执行了非法指令。通常是因为可执行文件本身出现错误,或是试图执行数据段。堆栈溢出时也有可能产生这个信号。

非法地址,包括内存地址对齐(alignment)出错。例如:访问一个四个字长的整数,但其地址不是4的倍数。

用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。

留给用户使用。

试图访问未分配给自己的内存,或试图往没有写权限的内存地址写数据。

管道破裂。

时钟定时信号,计算的是实际的时间或时钟时间。alarm函数使用该信号。

程序结束(terminate)信号,与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出。Shell命令kill缺省产生这个信号。

子进程结束时,父进程会收到这个信号。

参考