определить, нормально ли закрывается приложение - PullRequest
2 голосов
/ 02 июня 2011

есть ли способ определить, нормально ли выключается jvm?Хук отключения может только порождать поток, есть ли способ определить, существует ли JVM нормально или ненормально в это время?

Ответы [ 4 ]

2 голосов
/ 02 июня 2011

Вы можете написать файл при запуске и удалить его снова при корректном выходе.Если JVM исчезла, но файл все еще там, вы знаете, что он аварийно завершился или каким-либо другим образом завершил работу.

0 голосов
/ 02 июня 2011

Я вспомнил похожий вопрос , который задавали некоторое время назад.Одним из возможных направлений действий является использование SignalHandler .

. Вы можете прочитать полную статью здесь .Похоже, что это связано с IBM JVM, но я думаю, что это в равной степени справедливо и для горячей точки Java.

Малоизвестная особенность Java - способность приложения устанавливать собственный обработчик сигнала, которыйподдерживается через класс sun.misc.Signal.Тем не менее, соблюдайте осторожность при использовании классов из пакета sun.misc, поскольку он содержит недокументированные вспомогательные классы, которые могут меняться между выпусками Java.Вы можете установить обработчик Java для любого сигнала, который не используется JVM.Эти обработчики сигналов похожи на собственные обработчики, потому что они вызываются, когда генерируется собственный системный сигнал, но они всегда будут работать как отдельный поток Java.По сути, когда возникает сигнал, для которого доступен обработчик сигнала Java, «поток диспетчера сигналов» JVM пробуждается и получает информацию о сигнале.Затем поток диспетчера сигналов вызывает метод Java для создания и запуска нового потока для установленного обработчика сигналов Java.Чтобы написать обработчик сигнала Java, определите класс, который реализует интерфейс sun.misc.SignalHandler, и зарегистрируйте обработчик с помощью метода sun.misc.Signal.handle ().

0 голосов
/ 02 июня 2011

Когда JVM нормально отключается, это означает, что основной поток завершен. Если JVM закрывается для какого-либо другого режима (например, пользователь нажал Strg + C), основной поток все еще работает. Таким образом, вы можете сохранить ссылку на главный поток в своем хуке shutdown и проверить, жив ли этот поток. Конечно, это предполагает, что основной поток обычно будет последним запущенным потоком в вашем приложении. Я не знаю, какова ситуация, если один из потоков называется System.exit (), но вы можете легко это выяснить.

0 голосов
/ 02 июня 2011

Проверить возвращаемый статус с помощью команды $?

...