Что может заставить Java продолжать работать после System.exit ()?

У меня есть Java-программа, которая запускается черезProcessBuilder из другой программы Java.System.exit(0) вызывается из дочерней программы, но для некоторых наших пользователей (в Windows)java.exe процесс, связанный с ребенком, не прекращается. Дочерняя программа не имеет хуков выключения и не имеетSecurityManager который может остановитьсяSystem.exit() от завершения ВМ. Я не могу воспроизвести проблему самостоятельно на Linux или Windows Vista. Пока что единственные сообщения о проблеме поступают от двух пользователей Windows XP и одного пользователя Vista, использующих две разные JRE (1.6.0_15 и 1.6.0_18), но они способны воспроизвести проблему каждый раз.

Может кто-нибудь предложить причины, по которым JVM не сможет завершиться послеSystem.exit(), а то только на некоторых машинах?

Изменить 1: Я попросил пользователя установить JDK, чтобы мы могли получить дамп потока с ВМ-нарушителя. Пользователь сказал мне, что процесс виртуальной машины исчезает из VisualVM, как только он нажимает на пункт «Выход» в моем меню - но, согласно диспетчеру задач Windows, процесс не завершился, и неважно, как долго пользователь ждет (минуты, часы), он никогда не завершается.

Изменить 2: Теперь я подтвердил, чтоProcess.waitFor() в родительской программе никогда не возвращается хотя бы для одного пользователя, имеющего проблему. Итак, подведем итог: дочерняя виртуальная машина, кажется, мертва (VisualVM даже не видит ее), но родитель все еще видит процесс как живой, как и Windows.

Ответы на вопрос(8)

Ваш ответ на вопрос