我正在从 Java 程序启动一个进程。我抓住它,在程序的稍后点,我可能会向它发送一些信号(与 UNIX 信号不同——一种不同的机制),告诉它自己清理并关闭,这是终止这个进程的正确方法。我稍后可能会重新启动并保持该进程并再次停止它任意次数。
我希望我的程序在存在时发出信号终止进程并确保它存在。否则,由于 Java 异步启动进程,它会在我的程序终止后持续存在并继续运行。
我以为我会在包含 Process 变量的对象的析构函数中执行此操作,但似乎 Java 没有析构函数。它有一个用于释放通过 JNI 分配的内存的 finalize() 方法,但情况并非如此,显然你不能保证 finalize() 会被调用:它仅在对象被垃圾回收时调用,并且程序可能会在没有调用垃圾回收的情况下运行到终止,在这种情况下,所有东西都会立即释放,不会发生垃圾回收,也不会发生 finalize()。
确保在我的程序退出时首先调用此清理代码的最佳方法是什么?
我看到 Java 1.6 引入了 Runtime.addShutdownHook() 方法,但我目前停留在 Java 1.5 上。