11

我正在尝试使用“strace -p”附加到已经运行的 JBoss 进程。JBoss 使用 1.5.0_15 Java JDK。不幸的是,这不起作用 - 我只得到一个 futex() 结果:

# strace -p 3388
Process 3388 attached - interrupt to quit
[ Process PID=3388 runs in 32 bit mode. ]
futex(0x8f18f7c, FUTEX_WAIT_PRIVATE, 1, NULL <unfinished ...>

Strace 适用于所有其他程序,但不适用于 JBoss。当我通过 strace 启动该过程时,它似乎工作正常。当我尝试附加到已经运行的进程时,它只是不起作用。

我正在使用 64 位 Linux 2.6.18 和 32 位 Java JDK(如果重要的话,是 RedHat Enterprise Linux 5.3)。

更新#1:

我确实尝试使用“-d”运行它,但输出似乎没有任何洞察力,至少对我来说:


[root@]# strace -d -e verbose=all -p 3388
Process 3388 attached - interrupt to quit
 [wait(0x137f) = 3388]
pid 3388 stopped, [SIGSTOP]
 [wait(0x57f) = 3388]
pid 3388 stopped, [SIGTRAP]
[ Process PID=3388 runs in 32 bit mode. ]
futex(0x8f18f7c, FUTEX_WAIT_PRIVATE, 1, NULL
4

3 回答 3

12

如果该进程中有多个线程,则需要提供strace多个-p选项,并指定每个选项的 ID。看起来您正在成功跟踪原始父线程,它除了等待其他一些线程完成之外什么也没做。

(当您启动命令时它起作用的原因strace是默认情况下,它会strace选择创建的新子进程并跟踪它们)。

于 2010-01-27T23:24:04.413 回答
12

也许你可以试试这个:

strace -F -p PID

于 2014-06-27T16:08:13.763 回答
0

您是否尝试过使用 strace -d -p NNN 来获得一些 strace 调试输出?

也许添加 -e 详细信息?

strace 是否已将 setuid 安装到 root 以便您可以查看任何进程?

于 2010-01-27T23:10:37.017 回答