最直接方式是按ctrl+\,向前台进程组发送sigquit(编号3),默认终止进程并生成core dump,但需ulimit -c unlimited等配置允许。

在 Linux 中,发送 SIGQUIT 信号最直接的方式是通过终端按键 Ctrl+\,该操作会向当前前台进程组中的每个进程发送 SIGQUIT(编号 3),其默认行为是终止进程并生成核心转储文件(core dump)。但能否成功生成 core 文件,还取决于系统配置和资源限制。
终端按键触发 SIGQUIT
这是最常用、最轻量的触发方式:
- 运行一个前台进程(如
sleep 30或自定义 C 程序) - 在终端中按下 Ctrl + \(注意不是 Ctrl+Z 或 Ctrl+C)
- 若配置允许,进程退出时会显示类似
Quit (core dumped)的提示 - 当前工作目录下将生成名为
core(或带 PID 后缀如core.1234)的二进制文件
确保核心转储功能已启用
即使发出了 SIGQUIT,若系统禁用了 core dump,也不会生成文件。需检查并设置以下几项:
- 运行
ulimit -c查看当前 core 文件大小限制;若输出为0,表示禁止生成 - 执行
ulimit -c unlimited临时开启(仅对当前 shell 及其子进程有效) - 永久生效需修改
/etc/security/limits.conf(如添加* soft core unlimited) - 确认内核参数未屏蔽:检查
cat /proc/sys/kernel/core_pattern,非空或非none表示可用
用 kill 命令手动发送 SIGQUIT
适用于后台进程或需要精确控制的场景:
- 先获取目标进程 PID,例如
pidof sleep或ps aux | grep your_program - 执行
kill -3 <pid></pid>(-3即 SIGQUIT 的编号) - 也可写作
kill -SIGQUIT <pid></pid>,语义更清晰 - 注意:该进程必须有权限被当前用户 signal,且未忽略或屏蔽 SIGQUIT
程序内调用 abort() 或 raise(SIGQUIT)
在 C/C++ 程序中主动触发,常用于异常诊断:
-
#include <signal.h></signal.h>后调用raise(SIGQUIT);,效果等同于 Ctrl+\ -
#include <stdlib.h></stdlib.h>后调用abort();,它内部会发送 SIGABRT,同样默认生成 core dump - 两者区别:SIGQUIT 是用户主动退出+调试意图,SIGABRT 更偏向程序自检失败











