我用Java启动子进程如下:
final String[] cmd = {""}; Process process = Runtime.getRuntime().exec(cmd);
它现在在后台运行.一切都好又好.
如果我现在的程序崩溃(这是仍然在开发中:-))子进程似乎仍流连.如何在父Java进程终止时自动结束?
如果它有帮助,我使用的是Mac OS X 10.5
如你所说,addShutdownHook是要走的路.
但:
如果程序终止,则无法保证执行关闭挂钩.有人可能会杀死Java进程,在这种情况下,您的关闭挂钩将不会被执行.(如本SO问题所述)
一些标准库有自己的钩子,可以在你的之前运行.
小心死锁.
另一种可能性是将java程序包装在服务中.
我已经把它自己解决了.我添加了一个关闭钩子,如下所示:
final String[] cmd = {""}; final Process process = Runtime.getRuntime().exec(cmd); Runnable runnable = new Runnable() { public void run() { process.destroy(); } }; Runtime.getRuntime().addShutdownHook(new Thread(runnable));