11

「strace -p」を使用して、すでに実行中の JBoss プロセスにアタッチしようとしています。JBoss は 1.5.0_15 Java JDK を使用しています。残念ながら、これは機能しません - futex() の結果は 1 つしか得られません。

# 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 に答える
0

strace -d -p NNN を使用して strace デバッグ出力を取得しようとしましたか?

たぶん -e verbose を追加しますか?

任意のプロセスを調べることができるように、strace は root に setuid でインストールされていますか?

于 2010-01-27T23:10:37.017 に答える