如何使用java关闭正在运行的进程?

如何使用java关闭正在运行的进程?,java,Java,我正在使用java Runtime.exec()方法执行bat文件,在bat文件中我编写了执行jar的代码。这个jar包含线程类,该线程类在无限时间内汇集rabbitmq队列,如果找到消息,则对其执行操作,这意味着进程将无限期运行。我想用java代码终止这个过程,同时我想知道这个方法是否能够在Linux操作系统上执行shall脚本 **Used java code** String myCMD = "cmd.exe /C start c:\\elasticmgmtservice.bat";

我正在使用java Runtime.exec()方法执行bat文件,在bat文件中我编写了执行jar的代码。这个jar包含线程类,该线程类在无限时间内汇集rabbitmq队列,如果找到消息,则对其执行操作,这意味着进程将无限期运行。我想用java代码终止这个过程,同时我想知道这个方法是否能够在Linux操作系统上执行shall脚本

 **Used java code**

 String myCMD = "cmd.exe /C start c:\\elasticmgmtservice.bat";
 Runtime rt = Runtime.getRuntime();
 Process proc = rt.exec(myCMD);

**used batch file**

cd c: 
cd ElasticMgmtService\ 
java -jar ElasticIndexManagementService.jar config\ElasticIndexManagementService.xml
请帮助我解决此问题。

Runtime.exec()
返回一个流程对象,该对象是exec方法创建的流程的处理程序。要终止此进程,必须调用
process.destroy()

Runtime rt = Runtime.getRuntime();
rt.exec("taskkill " +<Your process>);
Runtime rt=Runtime.getRuntime();
rt.exec(“taskkill”+);
在Linux中

Runtime rt = Runtime.getRuntime();
rt.exec("kill -9 " +<Your process>);
Runtime rt=Runtime.getRuntime();
rt.exec(“kill-9”+);
Runtime.exec(…)返回由以下方法组成的
Process
对象

  • 销毁
  • exitValue()
  • getErrorStream()
  • getInputStream()
  • getOutputStream()
  • 等待()
可以调用destroy()终止子进程。此流程对象表示的子流程被强制终止。
或者,您可以在
Runtime.exec(…)
kill-9

中通过传递
taskkill/PID
进行kill。您不能在Linux上运行批处理文件,不能提供特定版本,也不能在Java中重写批处理!要终止进程,请查看我的try destroy()方法,但它不会关闭命令提示符(进程)。字符串myCMD=“cmd.exe/C start C:\\elasticmgmtservice.bat”;Runtime rt=Runtime.getRuntime();processproc=rt.exec(myCMD);proc.destroy()@sam-我已检查“cmd.exe/C start mspaint.exe”是否可以与destroy()一起正常工作。事实上,有一些进程并没有响应销毁方法。最好用'taskkill'或'kill'关闭。@Quoi-当我使用destroy方法和'taskkill'或'kill'运行以下代码时,它不会响应,意思是当我试图从进程列表中手动终止时,它没有终止进程。当我手动终止此进程时,它显示java.exe进程。它成功终止。我不明白发生了什么,如果你有任何想法,请告诉我。@sam-我想这可能是任何其他问题。你能试试吗-processp=Runtime.getRuntime().exec(“cmd.exe/C start mspaint.exe”);p、 破坏();如果它不起作用,那么这是另一个问题。因为上面的代码在我的系统中运行得很好。@Quoi-我试过了,但当销毁方法调用mspaint windows时,我的电脑上的窗口没有关闭,而你方的情况如何?它是否关闭?这似乎是个糟糕的主意。最好使用Process#destroy()。