多線程應用程序掛起並且不響應任何命令。我曾嘗試下面的東西沒有運氣:如何在Linux中調試多線程掛起進程?
- 附加一個過程GDB(錯誤:(GDB)連接6026 附加到進程6026 ptrace的:操作不允許)
- gstack(gstack只是掛像)
有沒有什麼好的方法來調試這個過程?
多線程應用程序掛起並且不響應任何命令。我曾嘗試下面的東西沒有運氣:如何在Linux中調試多線程掛起進程?
有沒有什麼好的方法來調試這個過程?
感謝您的回覆。問題出在內核級別。我們使用了echo t>/proc/sysrq-trigger,它將所有正在運行的進程的堆棧記錄在/ var/log/messages中。這個堆棧跟蹤有助於分析問題。
從堆棧跟蹤中,文件系統代表應用程序進程向其他進程(處於停用狀態)發佈了一些等待事件,並且無限期地等待響應。導致掛起狀態。
您是試圖以root用戶身份,還是以創建該進程的用戶身份或以其他用戶身份進行連接?你有沒有嘗試從gdb運行程序,直到它掛起的地步? –
@Jonatha Leffler我在root中運行該進程,並使用相同的id將進程附加到gdb中。這不是前臺進程,這是一個守護進程。 – Thangaraj
好的;如果它以root身份運行,並且您嘗試以root身份運行gdb,那麼它不是簡單的權限問題(但它可能很複雜)。總的來說,我要做的是在gdb中啓動守護進程,使用'set follow-fork-mode'和'set fork-detach-mode'等選項。 –