Я работаю над проектом, где мне нужно получить собственный стек Java-приложения.я могу достичь этого частично.благодаря ptrace / multiprocessing и сигналы.
в Linux обычное Java-приложение имеет минимум 14 потоков.из этих 14 меня интересует только основной поток, из которого я должен получить собственный стек.Учитывая эту цель, я запустил отдельный процесс с использованием fork (), который отслеживает собственный стек основного потока.Короче говоря, у меня есть 2 отдельных процесса: один отслеживается, а другой - мониторинг с использованием ptrace и обработки сигналов.
шаги в процессе мониторинга:
1) получить основной идентификатор потока из14 других потоков процесса.
2) ptrace_attach main_ID
3) ptrace_cont main_ID
непрерывный цикл запускается
{
4) убить (main_ID, SIGSTOP),
5) наноспит и проверить состояние из / proc / [pid] / stat dir
6) ptrace_peekdata для чтения стека и навигации
7) ptrace_cont main_ID
8) наносон и проверка состояния из / proc / [pid] / stat dir
}
9) ptrace_detach main_ID
, который идеально непрерывно дает информацию о собственном стеке.но иногда я сталкиваюсь с одной проблемой.
Проблема:
когда я посылаю kill (main_ID, SIGSTOP) в главный поток, другие потоки из процесса завершаются илиостановленное состояние (T) и все блоки процесса.это не консистентное поведение, и весь процесс выполняется правильно.я не мог понять это поведение, поскольку я только сигнализирую основной поток, почему другие потоки затронуты этим?Может ли кто-нибудь помочь мне в анализе проблемы?
Я также пытался использовать сигналы CONT и STOP во всех потоках процесса, но иногда проблема все еще возникает.
Спасибо, Sandeep