我有一个进程正在等待futex:
# strace -p 5538
Process 5538 attached - interrupt to quit
futex(0x7f86c9ed6a0c, FUTEX_WAIT, 20, NULL
我该如何最好地调试这种情况?我能够识别持有futex的人吗?是否有类似于ipcs和ipcrm但用于futexes的工具?
gdb -p *PID*
命令,然后运行where
或bt
查看回溯信息。即使二进制文件和库被剥离了调试符号,此方法也可能对您有所帮助,因为您可以从上下文中推断出一些信息。它可以指示复杂进程的哪个部分挂起,然后您可以检查源代码的正确部分以搜索锁定。请注意保留原有的HTML标签。我有一个与C++代码相关的问题。运行Ubuntu 12.10 64位系统。看起来像是2007年出现的类似问题,当时libc存在漏洞(也许现在还是?)。
我启动了一个pthread,在系统调用中运行traceroute。在系统调用之前和之后打印Printf,操作系统会在系统调用上挂起,而不执行traceroute。
我不确定我的Linux是否因为Ubuntu更新而再次出现故障,或者这是一个与libc相关的错误。由于许多应用程序似乎都有“类似”的问题,我认为它被卡在用户空间的某个地方。
我的C++代码在32位系统甚至64位OSX上都可以完美运行,所以我认为Ubuntu 12.10 + 64位libc组合存在问题。