一、信号类型
Linux系统共定义了64种信号,分为两大类:可靠信号与不可靠信号,前32种信号为不可靠信号,后32种为可靠信号。
不可靠信号: 也称为非实时信号,不支持排队,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次. 信号值取值区间为1~31;
可靠信号: 也称为实时信号,支持排队, 信号不会丢失, 发多少次, 就可以收到多少次. 信号值取值区间为32~64
1.2 信号表
在终端,可通过kill -l查看所有的signal信号
取值名称解释默认动作
1
|
SIGHUP
|
挂起
| |
2
|
SIGINT
|
中断
| |
3
|
SIGQUIT
|
退出
| |
4
|
SIGILL
|
非法指令
| |
5
|
SIGTRAP
|
断点或陷阱指令
| |
6
|
SIGABRT
|
abort发出的信号
| |
7
|
SIGBUS
|
非法内存访问
| |
8
|
SIGFPE
|
浮点异常
| |
9
|
SIGKILL
|
kill信号
|
不能被忽略、处理和阻塞
|
10
|
SIGUSR1
|
用户信号1
| |
11
|
SIGSEGV
|
无效内存访问
| |
12
|
SIGUSR2
|
用户信号2
| |
13
|
SIGPIPE
|
管道破损,没有读端的管道写数据
| |
14
|
SIGALRM
|
alarm发出的信号
| |
15
|
SIGTERM
|
终止信号
| |
16
|
SIGSTKFLT
|
栈溢出
| |
17
|
SIGCHLD
|
子进程退出
|
默认忽略
|
18
|
SIGCONT
|
进程继续
| |
19
|
SIGSTOP
|
进程停止
|
不能被忽略、处理和阻塞
|
20
|
SIGTSTP
|
进程停止
| |
21
|
SIGTTIN
|
进程停止,后台进程从终端读数据时
| |
22
|
SIGTTOU
|
进程停止,后台进程想终端写数据时
| |
23
|
SIGURG
|
I/O有紧急数据到达当前进程
|
默认忽略
|
24
|
SIGXCPU
|
进程的CPU时间片到期
| |
25
|
SIGXFSZ
|
文件大小的超出上限
| |
26
|
SIGVTALRM
|
虚拟时钟超时
| |
27
|
SIGPROF
|
profile时钟超时
| |
28
|
SIGWINCH
|
窗口大小改变
|
默认忽略
|
29
|
SIGIO
|
I/O相关
| |
30
|
SIGPWR
|
关机
|
默认忽略
|
31
|
SIGSYS
|
系统调用异常
|
二、信号产生
信号来源分为硬件类和软件类:
2.1 硬件方式
用户输入:比如在终端上按下组合键ctrl+C,产生SIGINT信号;
硬件异常:CPU检测到内存非法访问等异常,通知内核生成相应信号,并发送给发生事件的进程;
2.2 软件方式
通过系统调用,发送signal信号:kill(),raise(),sigqueue(),alarm(),setitimer(),abort()
kernel,使用 kill_proc_info()等
native,使用 kill() 或者raise()等
java,使用 Procees.sendSignal()等