如何清理Java中打开的Process?

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

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

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

什么是最好的方式来确保当我的程序退出这个清理代码首先被调用?

我看到Java 1.6引入了Runtime.addShutdownHook()方法,但我目前停留在Java 1.5上。


尝试/最后是最接近你会得到一个C ++析构函数。

Process process;

process = ....;

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

另外,addShutdownHook在1.3中添加...


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

链接地址: http://www.djcxy.com/p/19911.html

上一篇: How do I cleanup an opened Process in Java?

下一篇: Why would you ever implement finalize()?