我启动一个孩子的过程中Java如下:

final String[] cmd = {"<childProcessName>"};
Process process = Runtime.getRuntime().exec(cmd);

它现在运行的背景。所有好的和罚款。

如果我的计划现在崩溃(它 仍在开发:-))的儿童过程中似乎仍然挂在周围。我怎么能让它自动结束的时候,父Java过程中死亡?

如果有帮助,我使用的是Mac OS X10.5

有帮助吗?

解决方案

正如你说的, addShutdownHook 是的路要走。

但是:

  • 有没有真正保证您关闭挂钩是执行,如果程序的终止。有人能杀了Java进程和在这种情况下,你的关机钩,将不会执行。(如说在这 所以问题)

  • 一些标准图书馆都有自己挂钩,可以运行之前你的。

  • 要注意的僵局。

另一种可能性 包装你的java程序中的一个服务.

其他提示

我已经把它自己解决了。我添加了一个关闭钩子,如下所示:

final String[] cmd = {"<childProcessName>"};
final Process process = Runtime.getRuntime().exec(cmd);
Runnable runnable = new Runnable() {
    public void run() {
        process.destroy();
    }
};
Runtime.getRuntime().addShutdownHook(new Thread(runnable));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top