2013-06-26 53 views
-1

我运行这段代码:运行excecute命令不会结束

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

代码运行和做的工作,但程序不终止 - 这是红光(使用Eclipse IDE)仍在意味着节目没有结束。

可能是什么问题>

+0

你如何使用调试器? – mre

+3

如果关闭启动的资源管理器实例,会发生什么情况? – DaveH

+0

是不是从java进程派生出来的'explorer'进程?在浏览器结束之前,Java将继续运行。 –

回答

4

作为一般规则,分配空在Java的东西不让它停止或消失。充其量,可能会使做出任何无法访问的内容......并因此有资格在将来的某个时间点进行垃圾回收。

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


您这样说:

“消灭结束程序,还可以杀死exec当创建的过程。 ..”

好吧,如果你不想杀死进程,只是想知道是怎么回事,那么解释是,‘红灯’意味着孩子过程仍然奔跑G。如果你想让“红灯”在不杀死孩子的过程中消失,那么你很可能就不幸运了。

我想,其他的可能性是,你实际上希望子进程从Java应用程序“分离”。我不知道你将如何在Windows中做到这一点,但在Unix/Linux下你会推出这样的:

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

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

1

我很想将移动到runtime.exec的调用移入一个单独的Runnable对象。当您创建线程来启动此可运行时,请将其设置为守护程序。 JVM应该关闭,但保持守护进程线程运行。

0

所以从Java Exec将推出探险结尾了...

一种解决方案是简单地告诉了Java运行该浏览器运行的批处理文件。