Подтвердить что ты не робот

Не удалось "strace -p" в запущенном JBoss-процессе

Я пытаюсь использовать "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", но вывод не кажется более проницательным, по крайней мере для меня:


[[email protected]]# 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
4b9b3361

Ответ 1

Если в этом процессе есть несколько потоков, вам нужно указать strace multiple -p параметры, указав идентификатор каждого из них. Похоже, вы успешно отслеживаете исходный родительский поток, и он ничего не делает, кроме как ждать окончания каких-либо других потоков.

(Причина, по которой он работает при запуске команды из strace, заключается в том, что по умолчанию strace собирает новые дочерние процессы и отслеживает их).

Ответ 2

Возможно, вы можете попробовать следующее:

strace -F -p PID

Ответ 3

Вы пытались использовать strace -d -p NNN для получения отладочного вывода strace?

Может быть, добавить a-verbose?

Установлен ли strace setuid для root, чтобы вы могли изучить любой процесс?