我的應用程序進入殭屍的Linux機器上,它不能被殺死,並且gdb無法連接到它,我無法調試。現在我想知道最後調用的函數或回溯,無論如何我可以得到這個?/proc/pid/stat下面是否有任何信息可以用於此目的?zombie,gdb無法連接,如何檢查最後一次調用或回溯
0
A
回答
1
不,你不能。殭屍是一個已經消失的過程。唯一存在的是OS的進程表中的條目。
1
殭屍是已完成的進程,但他們的父代仍未處理信號和/或尚未調用系統調用系統調用(行話有父母沒有「收購」子進程)。殭屍進程釋放內存,但保留描述進程的一些內核結構,包括進程表中的條目。釋放內存無法獲得殭屍的堆棧跟蹤或內存轉儲。
+0
感謝您的回覆。有人告訴我,該進程的proc入口有一個字段顯示最後一個調用的函數地址,我可以獲取該值,然後gdb打開二進制文件並讀取該地址的函數名稱,你知道這可能嗎? – hexiay
+1
如果殭屍進程正常結束,那麼最後調用的函數將是'exit(2)'系統調用。如果它由於錯誤而終止,例如它已經收到'SIGSEGV',你可以安排一個核心轉儲產生。但是有殭屍意味着你應該從調試父進程開始,而不是殭屍,以找出爲什麼孩子沒有適當地收割。 –
相關問題
- 1. passthru()+管子進程=回溯(最近一次調用最後一次):(...)在stdout = subprocess.PIPE)
- 2. 如何解釋GDB回溯?
- 3. 解釋gdb回溯
- 4. 0x2e2e2e2e在GDB回溯?
- 5. GDB Windows?在回溯
- 6. Python中的回溯(最近調用最後一個)錯誤
- 7. 回溯標題:`最近最後一次通話'和'最後一個`
- 8. 回溯(最近最後一次通話)的EOFError
- 9. GDB不返回有用的回溯
- 10. 自動化gdb:每10毫秒顯示一次回溯
- 11. GDB回溯變量的值
- 12. gdb奇怪的回溯
- 13. GDB回溯子進程
- 14. GDB回溯不會在Mac
- 15. Python僅打印最後一個回溯?
- 16. SQL Server:查找用戶連接的最後一次
- 17. 無法與Behat一起使用Zombie JS
- 18. 如何設置gdb調試器連接?
- 19. 爲什麼我得到一個回溯(最近一次通話最後):
- 20. GDB如果幀在回溯中斷
- 21. 如何檢查系統最後一次調用的成功執行()
- 22. 沒有用戶輸入的gdb回溯?
- 23. GDB - 在回溯中禁用源視圖
- 24. Java Easymock抱怨「java.lang.IllegalStateException:void方法無法返回值」或「沒有可用的最後一次調用」
- 25. 如何檢查藍牙連接是否關閉或無法使用vb.net創建?
- 26. 最新的ndk-gdb無法連接到我的設備
- 27. 回溯(最近最後一次通話):(在trinket.io作品,但不是3.4/2.7.11)
- 28. 顯示所有第一次檢查或最短日期後的成功檢查
- 29. 修復追溯(最近一次通話最後)錯誤?
- 30. TraceBack(最近一次調用最後一次)和GPIO.setmode(GPIO.BOARD)或GPIO.setmode(GPIO.BCM)錯誤
處於殭屍狀態的進程已死亡,即不再運行,但尚未從系統中刪除。這就是爲什麼你無法使用例如GDB。 –