2012-06-28 25 views
0

我的應用程序進入殭屍的Linux機器上,它不能被殺死,並且gdb無法連接到它,我無法調試。現在我想知道最後調用的函數或回溯,無論如何我可以得到這個?/proc/pid/stat下面是否有任何信息可以用於此目的?zombie,gdb無法連接,如何檢查最後一次調用或回溯

+0

處於殭屍狀態的進程已死亡,即不再運行,但尚未從系統中刪除。這就是爲什麼你無法使用例如GDB。 –

回答

1

不,你不能。殭屍是一個已經消失的過程。唯一存在的是OS的進程表中的條目。

1

殭屍是已完成的進程,但他們的父代仍未處理信號和/或尚未調用系統調用系統調用(行話有父母沒有「收購」子進程)。殭屍進程釋放內存,但保留描述進程的一些內核結構,包括進程表中的條目。釋放內存無法獲得殭屍的堆棧跟蹤或內存轉儲。

+0

感謝您的回覆。有人告訴我,該進程的proc入口有一個字段顯示最後一個調用的函數地址,我可以獲取該值,然後gdb打開二進制文件並讀取該地址的函數名稱,你知道這可能嗎? – hexiay

+1

如果殭屍進程正常結束,那麼最後調用的函數將是'exit(2)'系統調用。如果它由於錯誤而終止,例如它已經收到'SIGSEGV',你可以安排一個核心轉儲產生。但是有殭屍意味着你應該從調試父進程開始,而不是殭屍,以找出爲什麼孩子沒有適當地收割。 –

相關問題