2011-09-05 114 views
5

多線程應用程序掛起並且不響應任何命令。我曾嘗試下面的東西沒有運氣:如何在Linux中調試多線程掛起進程?

  1. 附加一個過程GDB(錯誤:(GDB)連接6026 附加到進程6026 ptrace的:操作不允許)
  2. gstack(gstack只是掛像)

有沒有什麼好的方法來調試這個過程?

+0

您是試圖以root用戶身份,還是以創建該進程的用戶身份或以其他用戶身份進行連接?你有沒有嘗試從gdb運行程序,直到它掛起的地步? –

+0

@Jonatha Leffler我在root中運行該進程,並使用相同的id將進程附加到gdb中。這不是前臺進程,這是一個守護進程。 – Thangaraj

+0

好的;如果它以root身份運行,並且您嘗試以root身份運行gdb,那麼它不是簡單的權限問題(但它可能很複雜)。總的來說,我要做的是在gdb中啓動守護進程,使用'set follow-fork-mode'和'set fork-detach-mode'等選項。 –

回答

6

感謝您的回覆。問題出在內核級別。我們使用了echo t>/proc/sysrq-trigger,它將所有正在運行的進程的堆棧記錄在/ var/log/messages中。這個堆棧跟蹤有助於分析問題。

從堆棧跟蹤中,文件系統代表應用程序進程向其他進程(處於停用狀態)發佈了一些等待事件,並且無限期地等待響應。導致掛起狀態。

1

最有可能是其他人已經追蹤這個過程。要了解誰在做什麼,請查看proc文件系統。

cat /proc/6026/status|grep TracerPid 
+0

TracePid字段爲零 – Thangaraj

+0

然後原因是有些別的 – ks1322