我有一个进程在futex上等待:
# strace -p 5538
Process 5538 attached - interrupt to quit
futex(0x7f86c9ed6a0c, FUTEX_WAIT, 20, NULL我怎样才能最好地调试这种情况呢?我能确定谁持有futex吗?除了futexes之外,有没有类似于ipc和ipcrm的工具?
发布于 2015-05-03 03:59:16
尝试使用gdb -p *PID*,然后运行where或bt查看回溯。
对于已经去除了调试符号的二进制文件和库,它没有什么特别的用处,但是您可以从上下文中推断出相当多的东西。它可能能够向您指出复杂进程的哪一部分挂起,然后您可以检查源代码的正确部分来搜索锁。
发布于 2013-07-16 04:54:59
我用一段c++代码也遇到了同样的问题。运行ubuntu 12.10 64位。它看起来像2007年的类似问题,当时libc有buggy (也许现在仍然是?)。
我启动了一个pthread,它在系统调用中运行traceroute。Printf在系统指示之前和之后指示操作系统在系统调用时挂起,而不执行traceroute。
我不确定我的linux是因为ubuntu的更新而再次崩溃,还是因为libc相关的bug。由于许多应用程序似乎都有“类似”的问题,我假设它被困在用户空间的某个地方。
我的c++代码可以在32位系统甚至64位操作系统上完美运行,所以我假设ubuntu12.10+64位libc组合被破坏了。
https://stackoverflow.com/questions/17211357
复制相似问题