Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行时excecute命令不会结束_Java_Runtime.exec - Fatal编程技术网

Java 运行时excecute命令不会结束

Java 运行时excecute命令不会结束,java,runtime.exec,Java,Runtime.exec,我正在运行以下代码: Runtime rt = Runtime.getRuntime(); rt.exec("explorer"); rt = null; 代码运行并完成任务,但程序没有终止——即红灯(使用EclipseIDE)仍然亮着,这意味着程序没有结束 问题出在哪里?一般来说,在Java中为某个对象赋值null并不会使它停止或消失。充其量,它可以制造任何无法达到的东西。。。因此有资格在将来某个时候进行垃圾收集 如果要停止外部进程,需要调用进程对象。这将尝试强制终止外部子进程。它是否成功将

我正在运行以下代码:

Runtime rt = Runtime.getRuntime();
rt.exec("explorer");
rt = null;
代码运行并完成任务,但程序没有终止——即红灯(使用EclipseIDE)仍然亮着,这意味着程序没有结束


问题出在哪里?

一般来说,在Java中为某个对象赋值null并不会使它停止或消失。充其量,它可以制造任何无法达到的东西。。。因此有资格在将来某个时候进行垃圾收集

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


你这样评论:

“销毁结束程序,但同时终止exec创建的进程…”

如果您不想终止进程,只想知道发生了什么,那么解释是“红灯”表示子进程仍在运行。如果你想让“红灯”消失而不扼杀孩子的进程,你可能是运气不好

我想,另一种可能是您实际上希望子进程与Java应用程序“分离”。我不知道在Windows中如何实现这一点,但在Unix/Linux中,您可以这样启动它:

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

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

我会尝试将对runtime.exec的调用移动到一个单独的可运行对象中。创建线程以启动此runnable时,请将其设置为守护进程。JVM应该关闭,但让守护进程线程保持运行。

因此,来自Java的exec将启动资源管理器,而不会结束


一种解决方案是简单地告诉Java运行一个运行Explorer的批处理文件

使用调试器怎么样?如果关闭它启动的资源管理器实例会发生什么?资源管理器的
explorer
进程不是从java进程派生出来的吗?Java将一直运行,直到资源管理器结束。@DaveHowes程序结束!那么,如何在不终止创建的实例的情况下使程序结束呢?我已经运行了您的代码,它会立即终止(不取决于浏览器是否关闭)。