我等待一個futex的一個過程:調試一個futex的鎖定
# strace -p 5538
Process 5538 attached - interrupt to quit
futex(0x7f86c9ed6a0c, FUTEX_WAIT, 20, NULL
如何最調試這樣的情況?我可以識別誰擁有futex?有沒有類似於ipcs和ipcrm的工具,但用於futexes?
我等待一個futex的一個過程:調試一個futex的鎖定
# strace -p 5538
Process 5538 attached - interrupt to quit
futex(0x7f86c9ed6a0c, FUTEX_WAIT, 20, NULL
如何最調試這樣的情況?我可以識別誰擁有futex?有沒有類似於ipcs和ipcrm的工具,但用於futexes?
我有一個C++代碼相同的問題。運行Ubuntu 12.10 64bit。它在2007年看起來像一個類似的問題,其中libc是越野車(可能還是?)。
我開始在系統調用中運行traceroute的pthread。 printf在系統前後顯示,操作系統掛起在系統調用中,不執行traceroute。
我不確定我的linux是否因爲ubuntu更新而再次損壞,或者它是否與libc相關的錯誤。由於很多應用程序似乎都有「相似」的問題,我認爲它被卡在用戶空間的某個地方。
我的C++代碼在32位系統甚至64位osx上運行完美,所以我認爲ubuntu 12.10 + 64位libc組合已損壞。
嘗試使用gdb -p *PID*
,然後運行where
或bt
以查看回溯。
對於已刪除調試符號的二進制文件和庫,它不會非常有用,但是您可能能夠從上下文中推導出合理的位。它可能能夠指示覆雜進程掛起的哪一部分,然後您可以檢查源的正確部分以搜索該鎖。