1、信号列表
1) SIGHUP ? ? ? ? ?2) SIGINT ? ? ? ? 3) SIGQUIT ? ? ? 4) SIGILL ? ? ? ? 5) SIGTRAP ?
6) SIGABRT ? ? ? ? 7) SIGBUS ? ? ? ? 8) SIGFPE ? ? ? ?9) SIGKILL ? ? ? 10) SIGUSR1 ?
11) SIGSEGV ? ? ? ?12) SIGUSR2 ? ? ? 13) SIGPIPE ? ? ?14) SIGALRM ? ? ? 15) SIGTERM ?
16) SIGSTKFLT ? ? ?17) SIGCHLD ? ? ? 18) SIGCONT ? ? ?19) SIGSTOP ? ? ? 20) SIGTSTP ?
21) SIGTTIN ? ? ? ?22) SIGTTOU ? ? ? 23) SIGURG ? ? ? 24) SIGXCPU ? ? ? 25) SIGXFSZ ?
26) SIGVTALRM ? ? ?27) SIGPROF ? ? ? 28) SIGWINCH ? ? 29) SIGIO ? ? ? ? 30) SIGPWR ?
31) SIGSYS ? ? ? ? 34) SIGRTMIN ? ? ?35) SIGRTMIN+1 ? 36) SIGRTMIN+2 ? ?37) SIGRTMIN+3 ?
38) SIGRTMIN+4 ? ? 39) SIGRTMIN+5 ? ?40) SIGRTMIN+6 ? 41) SIGRTMIN+7 ? ?42) SIGRTMIN+8 ?
43) SIGRTMIN+9 ? ? 44) SIGRTMIN+10 ? 45) SIGRTMIN+11 ?46) SIGRTMIN+12 ?
47) SIGRTMIN+13 ?48) SIGRTMIN+14 ? ?49) SIGRTMIN+15 ? 50) SIGRTMAX-14 ?
51) SIGRTMAX-13 ? 52) SIGRTMAX-12 ?53) SIGRTMAX-11 ? ?54) SIGRTMAX-10 ?
55) SIGRTMAX-9 ? 56) SIGRTMAX-8 ? ?57) SIGRTMAX-7 ?
58) SIGRTMAX-6 ? ? 59) SIGRTMAX-5 ? ?60) SIGRTMAX-4 ? 61) SIGRTMAX-3 ?
62) SIGRTMAX-2 ?63) SIGRTMAX-1 ? ? 64) SIGRTMAX
首先列出的是POSIX.1中列出的信号:
SIGHUP 1 A 终端挂起或者控制进程终止?
SIGINT 2 A 键盘中断(如ctrl+c键被按下)?
SIGQUIT 3 C 键盘的退出键被按下?
SIGILL 4 C 非法指令?
SIGABRT 6 C 由abort(3)发出的退出指令?
SIGFPE 8 C 浮点异常?
SIGKILL 9 AEF Kill信号?
SIGSEGV 11 C 无效的内存引用?
SIGPIPE 13 A 管道破裂: 写一个没有读端口的管道?
SIGALRM 14 A 由alarm(2)发出的信号?
SIGTERM 15 A 终止信号 ,kill或killall通知程序
SIGUSR1 30,10,16 A 用户自定义信号1?
SIGUSR2 31,12,17 A 用户自定义信号2?
SIGCHLD 20,17,18 B 子进程结束信号?
SIGCONT 19,18,25 进程继续(曾被停止的进程)?
SIGSTOP 17,19,23 DEF 终止进程?
SIGTSTP 18,20,24 D 控制终端(tty)上按下停止键?
SIGTTIN 21,21,26 D 后台进程企图从控制终端读?
SIGTTOU 22,22,27 D 后台进程企图从控制终端写?
下面的信号没在POSIX.1中列出,而在SUSv2列出
SIGBUS 10,7,10 C 总线错误(错误的内存访问)?
SIGPOLL A Sys V定义的Pollable事件,与SIGIO同义?
SIGPROF 27,27,29 A Profiling定时器到?
SIGSYS 12,-,12 C 无效的系统调用 (SVID)?
SIGTRAP 5 C 跟踪/断点捕获?
SIGURG 16,23,21 B Socket出现紧急条件(4.2 BSD)?
SIGVTALRM 26,26,28 A 实际时间报警时钟信号(4.2 BSD)?
SIGXCPU 24,24,30 C 超出设定的CPU时间限制(4.2 BSD)?
SIGXFSZ 25,25,31 C 超出设定的文件大小限制(4.2 BSD)?
(对于SIGSYS,SIGXCPU,SIGXFSZ,以及某些机器体系结构下的SIGBUS,Linux缺省的动作是A (terminate),SUSv2 是C (terminate and dump core))
下面是其它的一些信号?
SIGIOT 6 C IO捕获指令,与SIGABRT同义?
SIGEMT 7,-,7?
SIGSTKFLT -,16,- A 协处理器堆栈错误?
SIGIO 23,29,22 A 某I/O操作现在可以进行了(4.2 BSD)?
SIGCLD -,-,18 A 与SIGCHLD同义?
SIGPWR 29,30,19 A 电源故障(System V)?
SIGINFO 29,-,- A 与SIGPWR同义?
SIGLOST -,-,- A 文件锁丢失?
SIGWINCH 28,28,20 B 窗口大小改变(4.3 BSD, Sun)?
SIGUNUSED -,31,- A 未使用的信号(will be SIGSYS)?
(在这里,- 表示信号没有实现;有三个值给出的含义为,第一个值通常在Alpha和Sparc上有效,中间的值对应i386和ppc以及sh,最后一个值对应mips。信号29在Alpha上为SIGINFO / SIGPWR ,在Sparc上为SIGLOST。)?
处理动作一项中的字母含义如下?
A 缺省的动作是终止进程?
B 缺省的动作是忽略此信号?
C 缺省的动作是终止进程并进行内核映像转储(dump core)?
D 缺省的动作是停止进程?
E 信号不能被捕获?
F 信号不能被忽略?
2、signal库函数
signal库函数可以设置程序对信号的处理方式。
包含头文件:
#include <signal.h>
函数声明
sighandler t signal(int signum, sighandler t handler),
参数signum表示信号的编号
参数handler表示信号的处理方式,有三种情况
1)SIG IGN:忽略参数signum所指的信号,
2)一个自定义的处理信号的函数,信号的编号为这个自定义函数的参数。
3)SIG DFL:恢复参数signum所指信号的处理方法为默认值。
程序员不关心signal的返回值。
Signal | Description |
SIGABRT-6 | 由调用abort函数产生,进程非正常退出 |
SIGALRM-14 | 用alarm函数设置的timer超时或setitimer函数设置的interval timer超时 |
SIGBUS-7 | 某种特定的硬件异常,通常由内存访问引起 |
SIGCANCEL | 由Solaris Thread Library内部使用,通常不会使用 |
SIGCHLD-17 | 进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略 |
SIGCONT-18 | 当被stop的进程恢复运行的时候,自动发送 |
SIGEMT | 和实现相关的硬件异常 |
SIGFPE-8 | 数学相关的异常,如被0除,浮点溢出,等等 |
SIGFREEZE | Solaris专用,Hiberate或者Suspended时候发送 |
SIGHUP-1 | 发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送 终端挂起或者控制进程终止 |
SIGILL-4 | 非法指令异常 |
SIGINFO | BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程 |
SIGINT-2 | 由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程 |
SIGIO-29 | 异步IO事件 |
SIGIOT | 实现相关的硬件异常,一般对应SIGABRT |
SIGKILL-9 | 无法处理和忽略。中止某个进程 |
SIGLWP | 由Solaris Thread Libray内部使用 |
SIGPIPE-13 | 在reader中止之后写Pipe的时候发送 |
SIGPOLL | 当某个事件发送给Pollable Device的时候发送 |
SIGPROF-27 | Setitimer指定的Profiling Interval Timer所产生 |
SIGPWR-30 | 和系统相关。和UPS相关。 |
SIGQUIT-3 | 输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程 |
SIGSEGV-11 | 非法内存访问 |
SIGSTKFLT-16 | Linux专用,数学协处理器的栈异常 |
SIGSTOP-19 | 中止进程。无法处理和忽略。 |
SIGSYS-31 | 非法系统调用 |
SIGTERM-15 | 请求中止进程,kill命令缺省发送 |
SIGTHAW | Solaris专用,从Suspend恢复时候发送 |
SIGTRAP-5 | 实现相关的硬件异常。一般是调试异常 |
SIGTSTP-20 | Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程 |
SIGTTIN-21 | 当Background Group的进程尝试读取Terminal的时候发送 |
SIGTTOU-22 | 当Background Group的进程尝试写Terminal的时候发送 |
SIGURG-23 | 当out-of-band data接收的时候可能发送 |
SIGUSR1-10 | 用户自定义signal 1 |
SIGUSR2-12 | 用户自定义signal 2 |
SIGVTALRM-26 | setitimer函数设置的Virtual Interval Timer超时的时候 |
SIGWAITING | Solaris Thread Library内部实现专用 |
SIGWINCH-28 | 当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程 |
SIGXCPU-24 | 当CPU时间限制超时的时候 |
SIGXFSZ-25 | 进程超过文件大小限制 |
SIGXRES | Solaris专用,进程超过资源限制的时候发送 |