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