我正在尝试使用“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
最佳答案
如果该进程中有多个线程,则需要为strace
提供多个-p
选项,并指定每个ID的ID。看起来您已经成功跟踪了原始父线程,除了等待其他线程完成之外,它什么都不做。
(从strace
启动命令时起作用的原因是,默认情况下,strace
也会拾取创建的新子进程并跟踪它们)。