如何在Java中清理已打开的进程?

时间:2009-04-07 19:00:13

标签: java destructor

我正在从Java程序开始一个进程。我抓住它,在程序的后期,我可以发送一些信号(不是在UNIX信号中 - 一种不同的机制)告诉它清理自己并关闭,这是终止这个过程的正确方法。我可能稍后重新启动并保持该过程并再次停止它任意次。

我希望我的程序存在时,表示Process终止并确保它存在。否则,由于Java以异步方式启动进程,因此它会在程序终止后持续存在并继续运行。

我以为我会在析构函数中为包含Process变量的对象执行此操作,但似乎Java没有析构函数。它有一个finalize()方法来释放通过JNI分配的内存,但这不是这种情况,显然你不能保证调用finalize():它只在对象被垃圾收集时调用,并且程序可能会在没有调用垃圾收集的情况下运行到终止,在这种情况下,所有内容都会立即释放,并且不会发生垃圾收集,也不会发生finalize()。

确保当我的程序退出时,最好的方法是先调用这个清理代码?

我看到Java 1.6引入了Runtime.addShutdownHook()方法,但我目前仍然使用Java 1.5。

2 个答案:

答案 0 :(得分:3)

尝试/最终是最接近C ++析构函数的。

Process process;

process = ....;

try
{
    // do work
}
finally
{
    // send info to process to shut it down
}

此外,addShutdownHook was added in 1.3 ...

答案 1 :(得分:1)

为什么不在调用System.exit之前调用它?您的代码可能应该是结构化的,因此您只能从一个地方(或从main返回)调用System.exit,无论哪种方式都是一种很好的方式。