运行时执行命令不会结束

时间:2013-06-26 14:51:11

标签: java runtime.exec

我正在运行此代码:

Runtime rt = Runtime.getRuntime();
rt.exec("explorer");
rt = null;

代码运行并完成工作,但程序没有终止 - 这是红灯(使用Eclipse IDE)仍然意味着程序没有结束。

可能是什么问题>

3 个答案:

答案 0 :(得分:4)

作为一般规则,在Java中为null分配null不会使其停止或消失。充其量,可以制作任何无法访问的内容......因此有资格在将来的某个时间点进行垃圾收集。

如果要停止外部流程,则需要在Process对象上调用destroy()。这将尝试强制终止外部子进程。它是否会成功取决于应用程序的权限。 (这是否会终止所有子进程后代取决于平台...)


您评论如此:

  

“销毁结束程序,但也杀死了exec创建的进程......”

好吧,如果你不想杀死这个过程,只是想知道发生了什么,那么解释是“红灯”意味着子进程仍然是运行。如果你希望“红灯”能够在不杀死儿童过程的情况下消失,你可能会失去运气。

我想,另一种可能性是您实际上希望子进程从Java应用程序“分离”。我不知道你将如何在Windows中执行此操作,但在Unix / Linux中你会像这样启动它:

 /bin/bash -c "/usr/bin/nohup /usr/bin/firefox &"

&表示在后台运行,nohup分离标准输入/输出/错误。

答案 1 :(得分:1)

我很想将对runtime.exec的调用转移到一个单独的Runnable对象中。创建Thread以启动此runnable时,将其设置为守护程序。 JVM应该关闭,但让守护程序线程继续运行。

答案 2 :(得分:0)

因此,来自Java的exec将启动探索器而不会结束......

一个解决方案就是告诉Java运行运行资源管理器的批处理文件。