sigquit(信号编号3)默认行为是终止进程并生成核心转储文件;最常用触发方式为终端中按下ctrl+\,也可通过kill -3 或raise(sigquit)等方式发送。

在 Linux 中,SIGQUIT(信号编号 3)的默认行为是:终止进程 并生成核心转储文件(core dump)。它和 SIGINT(Ctrl+C)不同,后者只终止进程、不产生 core 文件;而 SIGQUIT 更适合用于调试崩溃前的内存状态。
如何触发 SIGQUIT
最常用、最直接的方式是在终端中运行前台进程时,按下:
- Ctrl + \(注意是反斜杠,不是正斜杠 /)
此时,内核会向当前前台进程组中的每个进程发送 SIGQUIT。如果进程未自定义处理该信号,就会按默认动作退出,并在当前工作目录下生成一个名为 core 或 core.<pid></pid> 的文件。
确保核心转储功能已启用
很多系统(尤其是云服务器或发行版默认配置)会禁用 core dump,因为频繁崩溃可能快速占满磁盘空间。需手动检查并开启:
- 查看当前限制:
ulimit -c—— 若输出为0,表示禁用 - 临时开启(当前 shell 及其子进程有效):
ulimit -c unlimited - 若要永久生效,可修改
/etc/security/limits.conf,添加:
* soft core unlimited
* hard core unlimited
注意:某些系统还要求设置 core pattern,例如:echo "/tmp/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern
这样可将 core 文件统一存到 /tmp 并带程序名和 PID,避免污染当前目录。
验证是否成功生成 core 文件
运行一个简单会响应 SIGQUIT 的程序(比如 sleep 100),然后按 Ctrl+\:
- 进程立即退出(返回码通常为 130 左右)
- 检查当前目录或你设定的 core_pattern 路径,应出现类似
core.sleep.12345的文件 - 用
file core.*确认是 ELF 核心转储;用gdb ./sleep core.*加载后可查看寄存器、堆栈、内存等状态
其他触发 SIGQUIT 的方式
除键盘外,也可通过命令行主动发送:
-
kill -3 <pid></pid>(-3 等价于 -QUIT) -
kill -QUIT <pid></pid>(更可读) - 在 C 程序中调用
raise(SIGQUIT)或abort()(后者发的是 SIGABRT,但效果类似:退出 + core dump)
注意:这些方式对后台进程也有效,不局限于前台进程。











