深度解析:SIGINT、SIGQUIT 和 SIGTERM 的区别与用法
在 Linux 系统中,信号(Signal)是进程间通信的重要工具,而其中的 SIGINT、SIGQUIT 和 SIGTERM 是常见的三种终止信号。它们看似功能相似,都是“让进程退出”,但背后的工作原理和使用场景却各有不同。
本文将通过原理剖析、对比说明和实际应用案例,帮助你全面了解这三种信号的区别和具体用法。
一、信号的基础知识
Linux 中的信号可以看作是进程收到的一种“通知”或“命令”。这些信号是由内核发送给目标进程的,进程可以选择处理信号,也可以忽略它(某些信号除外,比如 SIGKILL)。
常见信号分类
信号大致分为两类:
- 同步信号:由硬件异常触发,比如非法内存访问(SIGSEGV)。
- 异步信号:由用户或系统主动触发,比如
kill
命令或按下键盘组合键。
SIGINT、SIGQUIT 和 SIGTERM 都属于异步信号,是人为控制进程的重要手段。
二、SIGINT、SIGQUIT 和 SIGTERM 的原理与特点
1. SIGINT:中断信号(Signal Interrupt)
- 信号编号:2
- 触发方式:通常由键盘
Ctrl+C
触发。 - 作用:请求进程停止运行,但可以被捕获或忽略。
- 特点:
- 属于“优雅退出”信号,进程收到后通常会执行清理操作再退出。
- 用户通过键盘发送,适用于手动中断任务。
实际案例:
假设我们运行了一个持续打印数字的脚本:
while true; do echo "Running..."; sleep