Linux - 信号机制 (Signals)
...大约 2 分钟
Linux 中的信号是进程间通信的一种异步事件,可以在任意时刻发生,例如键盘按下 Ctrl + C
就会产生 SIGINT
信号
一、常见的信号
信号名称 | 信号值 | 说明 |
---|---|---|
SIGHUP | 1 | 控制终端挂起信号 |
SIGINT | 2 | 进程中断信号,由 Ctrl + C 产生,用于进程终止 |
SIGABRT | 6 | 进程终止信号,由 abort() 函数产生,用于进程异常终止 |
SIGFPE | 8 | 浮点异常信号,非法的数学运算 |
SIGKILL | 9 | 强制杀死进程信号,由 kill -9 <pid> 命令产生,用于杀死进程 |
SIGSEGV | 11 | 无效内存引用信号,由 segmentation fault 产生,通常由解引用空指针引起 |
SIGPIPE | 13 | 管道破裂信号,非法写入管道 |
SIGALRM | 14 | 闹钟信号,由 alarm() 函数产生,用于定时器 |
SIGTERM | 15 | 终止进程信号,用于终止进程 |
SIGCONT | 18 | 继续进程信号,用于恢复被暂停的进程 |
SIGSTOP | 19 | 暂停进程信号,由 Ctrl + Z 产生,用于暂停进程 |
SIGUSR1 | 30,10,16 | 用户自定义信号 1 |
SIGUSR2 | 31,12,17 | 用户自定义信号 2 |
二、信号处理
进程在接收到信号后,可能采取以下三种处理方式:
- 操作系统默认处理
- 忽略信号 (但
SIGSTOP
,SIGKILL
无法被忽略) - 捕获信号并自定义处理 (除了
SIGSTOP
,SIGKILL
信号)
三、信号的发送
信号的发送需要通过 kill
命令 (叫 kill
命令是因为它最初的功能就是杀死进程,而后来发展为发送信号的命令)
语法:
kill -<signal> <pid>
Powered by Waline v3.4.1