1. 信号的概念
Linux进程间通信的方式之一。信号也称为“软件中断”。
信号特点:
- 简单;
- 携带信息有限;
- 满足特定条件才发送信号;
- 可进行用户空间和内核空间进程的交互;
2. 信号的编号
kill -l // 查看信号编号
POSIX信号标准:
1~31为常规信号;34~64为实时信号(驱动编程、硬件相关)。
Linux常规信号介绍:
编号 | 信号 | 事件 | 默认操作 |
1 | SIGHUP | 用户退出shell时,由该shell启动的所有进程会收到SIGHUP信号。 | 终止进程 |
2 | SIGINT | Ctrl + C触发该信号,由该终端启动的正在运行的进程会收到SIGINT信号。 | 终止进程 |
3 | SIGQUIT | Ctrl + \ 触发该信号,由该终端启动的正在运行的进程会收到SIGQUIT信号。 | 终止进程 |
4 | SIGILL | CPU检测到某些进程执行非法指令。 | 终止进程并产生core文件 |
5 | SIGTRAP | 由断点指令或其他trap指令产生。 | 终止进程并产生core文件 |
6 | SIGABRT | 调用abort函数时产生该信号。 | 终止进程并产生core文件 |
7 | SIGBUS | 非法访问内存地址、内存对齐出错。 | 终止进程并产生core文件 |
8 | SIGFPE | 发生致命运算错误。浮点运算错误、溢出、除数为0等。 | 终止进程并产生core文件 |
9 | SIGKILL | 无条件终止进程。该信号不能被忽略、处理、阻塞。 | 终止任意进程 |
10 | SIGUSE1 | 用户定义的信号。程序员可在程序中定义并使用该信号。 | 终止进程 |
11 | SIGSEGV | 进程进行了无效内存访问(段错误)。 | 终止进程并产生core文件 |
12 | SIGUSR2 | 用户定义的信号。程序员可在程序中定义并使用该信号。 | 终止进程 |
13 | SIGPIPE | Broken pipe向一个无读端的管道写数据。 | 终止进程 |
14 | SIGALRM | 定时器超时,超时时间由系统调用alarm设置。 | 终止进程 |
15 | SIGTERM | 终止进程,该信号可被阻塞、终止。通常用来通知程序正常退出。kill命令的缺省选项就是这个信号。 | 终止进程 |
16 | SIGSTKFLT | Linux早期版本的信号,使用极少。 | 终止进程 |
17 | SIGCHLD | 子进程结束时,父进程会收到该信号。 | 忽略 |
18 | SIGCONT | 使暂停的进程继续运行 | 继续/忽略 |
19 | SIGSTOP | 暂停进程。不能被忽略、处理、阻塞。 | 暂停进程 |
20 | SIGTSTP | Ctrl + z触发该信号,暂停与终端交互的进程。 | 暂停进程 |
21 | SIGTTIN | 后台进程读终端控制台 | 暂停进程 |
22 | SIGTTOU | 类似于SIGTTIN,后台进程向终端输出数据时触发 | 暂停进程 |
23 | SIGURG | socket上有紧急数据时,向当前进程发出该信号 | 忽略 |
24 | SIGXCPU | 进程执行时间超过CPU时间的总量。(不是超过了时间片) | 终止进程 |
25 | SIGXFSZ | 超过文件最大长度 | 终止进程 |
26 | SIGVTALRM | 虚拟时钟产生的信号,类似于SIGALRM。该信号3计算该进程占用CPU的时间 | 终止进程 |
27 | SIGPROF | 类似于SIGVTALRM,计算进程占用CPU时间 + 系统调用时间 | 终止进程 |
28 | SIGWINCH | 窗口大小变化时触发 | 忽略 |
29 | SIGIO | 向进程发出一个异步IO事件 | 忽略 |
30 | SIGPWR | 关机 | 终止进程 |
31 | SIGSYS | 无效的系统调用 | 终止进程并产生core文件 |
31~64 | SIGRTMIN~SIGRTMAX | Linux实时信号,无固定含义,可由用户自定义 | 终止进程 |