You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

进程死锁无法生成core dump,gdb附加失败原因排查

GDB附加卡住的原因分析
  • 进程处于不可中断休眠状态(D状态)
    当进程因死锁陷入资源等待时,可能进入Linux内核的TASK_UNINTERRUPTIBLE状态(ps输出显示为D)。这种状态下进程会忽略绝大多数信号,包括GDB附加时发送的SIGSTOP信号,导致GDB无法暂停进程、获取上下文,最终卡住。

  • 自定义信号处理器引发锁持有死锁
    SEGFAULT的自定义信号处理器执行清理逻辑时,若持有了全局锁或其他共享资源,而其他线程正等待该资源,会形成死锁。GDB附加需要暂停所有线程,但死锁中的线程(包括信号处理器所在线程)无法响应暂停信号,导致附加流程无法推进。

  • Core Dump生成流程阻塞
    即便进程最终没生成core dump,若系统core dump机制(如/proc/sys/kernel/core_pattern配置的处理程序)在尝试处理core时陷入等待,或进程因死锁无法完成core dump的前期资源释放,会让进程处于僵持状态,阻碍GDB附加。

  • 线程在内核态循环等待
    若死锁发生在内核态(比如持有内核锁后陷入循环),用户态的GDB无法强制中断内核态执行,只能持续等待进程回到用户态,最终表现为附加卡住。

排查建议
  • 执行ps -o state <pid>查看进程状态,若为D则确认是不可中断休眠导致。
  • 尝试pstack <pid>获取线程栈信息,若pstack也卡住,进一步验证进程无法响应外部信号。
  • 检查/proc/sys/kernel/core_pattern配置,确认无异常的core处理程序拖慢进程。

内容的提问来源于stack exchange,提问作者raving_sage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:15:06