2010-06-10 3 views
1

Есть ли способ узнать, когда определенный процесс «застрял» на Java?Как узнать, когда застрял конкретный процесс?

Я запускаю внешнее приложение из своей java-программы. Иногда это приложение зависает. Я хотел бы знать, когда это приложение перестает работать, поэтому я могу убить его из своего кода. Я думаю о некоторых типах мониторинга из другого потока в моем коде.

Какие-либо из них?

+0

У вас есть четкое определение того, что означает «повесить»? как бы вы сказали разницу между тем, что он висел, и просто очень медленно? – luke

+0

Какая ОС работает? – Oli

+0

Я точно не знаю. Это приложение представляет собой сборку dev, поэтому обычно это зависает. Я думал о контроле за состоянием процесса. Что-то похожее на то, когда в диспетчере задач Windows статус говорит «Не отвечает». Мне тоже нужно было работать на Mac. – Omar

ответ

0

Мой первый вопрос - спросить, что вы подразумеваете под «застрявшим». Это в бесконечном цикле? Это тупик?

По характеру вопроса, который я предполагаю, вы не знаете, но если все, что вы хотите сделать, это убить его, когда оно зависает, вы можете периодически его записывать в файл. Другой процесс может отслеживать этот файл, и если некоторое количество периодов проходит, не видя выхода, вы можете его убить.

+0

Звучит как хорошее решение. Однако я не могу изменить запущенное приложение, потому что у меня нет доступа к его коду. – Omar

+0

Учитывая, что вы не можете изменить приложение и не зная, как приложение взаимодействует с остальным миром, или как вы знаете, что оно повесило, я не верю, что этот вопрос отвечает. – danben

+0

Спасибо за ваши ответы danben. Я думал, что может быть способ узнать статус процесса в ОС с Java. – Omar

1

Под Java 6 вы можете получить дамп потоков для всех потоков. Если вы снимете каждую минуту, вы увидите, что происходит.

Смежные вопросы