Как я могу поймать момент, когда кто-то убивает процесс java.exe? - PullRequest
1 голос
/ 14 декабря 2009

консольное Java-приложение. Кто-то убивает процесс java.exe с помощью диспетчера задач. Как я могу записать в журналы некоторую информацию в этот момент до закрытия приложения?

Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread t, Throwable e) { ..... }
}); 

ИЛИ

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { ..... }
});

не выполнять в такой ситуации

Ответы [ 5 ]

6 голосов
/ 14 декабря 2009

Это невозможно. Отключающие крюки будут выполняться только при упорядоченном отключении :

В редких случаях виртуальный машина может прерваться, то есть остановить работает без выключения чисто. Это происходит, когда виртуальная машина прекращается внешне, например с сигналом SIGKILL на Unix или TerminateProcess вызов на Microsoft Окна.

Вы можете отправить другой сигнал, который вызовет упорядоченное отключение, например SIGINT. Убийство приложения должно быть последним средством после того, как приложение не ответило.

3 голосов
/ 14 декабря 2009

некоторые практические решения уже были предложены, но другим является пинг-понг сообщения «последний статус» между 2 приложениями, которые контролируют друг друга. Когда один из них умирает, другой записывает последнее полученное сообщение в файл журнала. Пользователи не могут уничтожить оба процесса достаточно быстро с помощью диспетчера задач.

2 голосов
/ 14 декабря 2009

вы можете попытаться запустить java.exe через небольшое простое (например, c ++) приложение, используя CreateProcess (в windows), которое затем продолжит мониторинг дескриптора процесса java. если Java-процесс ушел, он может войти в него.

2 голосов
/ 14 декабря 2009

Некоторым решением является постоянная запись чего-либо в файл журнала. Таким образом, вы увидите, каким был «последний вздох» Java-программы.

1 голос
/ 14 декабря 2009

Предоставьте своим пользователям упорядоченный способ выключения системы и попросите их прекратить использование диспетчера задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...