如何在java中完成作业后杀死java中的进程

时间:2011-07-15 12:18:37

标签: java

我的代码类似于:

URL url = Activator.getDefault().getBundle().getEntry("/resources/server.bat");
String fileURL = FileLocator.toFileURL(url).toString();
String commandLine = "cmd.exe /c start " +fileURL;
Process process= Runtime.getRuntime().exec(commandLine);

如何在java

中完成工作后立即终止进程

3 个答案:

答案 0 :(得分:5)

process.destroy()

但它无法控制从单独启动的server.bat开始的过程

答案 1 :(得分:0)

Runtime.exec创建一个Process,它实际上是目标机器上的子shell。可以使用process.destroy();杀死或终止此特定子shell。方法。但是特定的子进程可能在批处理或shell脚本中为其他外部命令生成了许多其他子进程。如果我们杀死父进程,子进程可能不会被杀死,这可能会使情况恶化。

答案 2 :(得分:0)

首先,您必须已经知道,当您执行Java程序时,它在JVM(Java虚拟机)上运行。因此,当您执行“tasklist”命令时,您将无法看到您的Java进程名称。

幸运的是,安装JDK后,您可以使用Java虚拟机进程状态工具查看计算机上运行的所有Java进程。要使用它,只需输入“jps”命令:

正如您所看到的,“jps”命令为您提供了所需的所有信息,如PID和Java进程名称。因此,通过使用java进程名称,您现在可以终止所需的进程。

在这里你可以找到魔术命令行:

for /f "tokens=1" %i in ('jps -m ^| find "JAVA_PROCESS_NAME"') do ( taskkill /F /PID %i )

此命令将执行“jps -m”命令并获取包含给定“JAVA_PROCESS_NAME”的java进程的PID并执行“taskkill / F / PID”。 N.B.1:用您自己的进程名称替换“JAVA_PROCESS_NAME”。 N.B.2:对于bat文件,将一个%(%% i)而不是一个。

例如,要终止Eclipse程序,请键入以下命令:

C:\Users\YannickL>for /f "tokens=1" %i in ('jps -m ^| find "Eclipse"') do ( taskkil l /F /PID %i ) C:\Users\YannickL>(taskkill /F /PID 5076 ) SUCCESS: The process with PID 5076 has been terminated.