Я запускаю процесс из Java-программы. Я держусь за нее, и в более поздних точках программы я могу отправить ей некоторые сигналы (а не сигналы UNIX - другой механизм), чтобы сказать, чтобы он очистился и выключился, что является надлежащим способом прекращения этого процесса. Я могу позже перезапустить и удерживать процесс и остановить его снова произвольным числом раз.
Я хочу, чтобы моя программа, когда она существует, сигнализировала о завершении процесса и убедилась, что она существует. В противном случае, поскольку Java запускает процесс асинхронно, он сохраняется и продолжает выполняться после завершения моей программы.
Я думал, что сделаю это в деструкторе для объекта, который содержит переменную Process, но похоже, что Java не имеет деструктора. У этого есть метод finalize() для освобождения памяти, выделенной через JNI, но это не такой случай, и, по-видимому, вы не можете гарантировать, что finalize() будет вызван: он вызывается только тогда, когда объект является сборкой мусора, и программа может переходить к завершению, не вызывая сбор мусора, и в этом случае все сразу освобождается, а сбор мусора и не завершается().
Какой лучший способ убедиться, что когда моя программа выходит из этого кода очистки, вызывается сначала?
Я вижу, что Java 1.6 внедрил метод Runtime.addShutdownHook(), но в настоящее время я застрял на Java 1.5.