如何在Linux中调试多线程挂起进程?

时间:2011-09-05 07:09:37

标签: c linux multithreading linux-kernel

多线程应用程序挂起,它没有响应任何命令。我试过没有运气的事情:

  1. 将进程附加到gdb(错误:(gdb)attach 6026                                附加到过程6026                                ptrace:不允许操作。)
  2. gstack(gstack就像那样挂起)
  3. 有没有什么好方法可以调试这个过程?

2 个答案:

答案 0 :(得分:6)

感谢您的回复。问题出在内核级别。我们用echo t> / proc / sysrq-trigger,它记录/ var / log / messages中所有正在运行的进程的堆栈。这个堆栈跟踪有助于分析问题。

从堆栈跟踪中,文件系统代表应用程序进程向其他进程(处于已关闭状态)发布了一些等待事件,并无限期地等待响应。这导致了悬挂状态。

答案 1 :(得分:1)

很可能其他人已经在追踪这个过程。要找出谁在做它,请查看proc文件系统。

cat /proc/6026/status|grep TracerPid