嵌入式设备中askfirst进程遇Ctrl+\触发SIGQUIT生成core dump的原因与解决咨询
核心原因
- 系统默认信号行为:Ctrl+\是Linux终端默认绑定的SIGQUIT信号触发键,系统对SIGQUIT的默认处理逻辑就是终止进程并生成core dump——这是内核级的规则,和askfirst自身代码无关。
- askfirst未干预信号处理:你在askfirst代码里找不到相关处理,说明它没有对SIGQUIT做自定义捕获或忽略,完全遵循系统默认规则,所以按下Ctrl+\就会触发core dump。
预防方案
1. 修改终端信号绑定
- 临时生效:在当前串口终端执行
stty quit undef,取消Ctrl+\和SIGQUIT的关联,之后按Ctrl+\不会触发信号;要恢复的话执行stty quit ^\。 - 永久生效:把
stty quit undef添加到系统启动脚本(比如/etc/profile、askfirst启动前的初始化脚本),确保每次终端启动都自动应用。
2. 给askfirst添加SIGQUIT处理逻辑
在askfirst代码里注册信号处理函数,把SIGQUIT设为忽略或自定义处理:
#include <signal.h> int main() { signal(SIGQUIT, SIG_IGN); // 注册忽略SIGQUIT的处理,也可添加日志等自定义逻辑 // 原有初始化逻辑 }
重新编译后,askfirst收到SIGQUIT就不会生成core dump了。
3. 系统级禁用core dump
如果嵌入式环境不需要任何进程生成core dump,可以全局关闭:
- 临时生效:执行
ulimit -c 0,当前会话下所有进程都不会生成core dump; - 永久生效:在
/etc/security/limits.conf中添加以下内容:
重启系统后生效,会影响所有进程。* soft core 0 * hard core 0
内容的提问来源于stack exchange,提问作者Dillip Murali
相关产品推荐
相关产品推荐

