【问题标题】:How to close running process using java?如何使用java关闭正在运行的进程?
【发布时间】:2012-05-03 12:32:40
【问题描述】:

我正在使用 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

请帮我解决问题。

【问题讨论】:

标签: java


【解决方案1】:

Runtime.exec(...) 返回由以下方法组成的 Process 对象

  • destroy()
  • exitValue()
  • getErrorStream()
  • getInputStream()
  • getOutputStream()
  • 等待()

你可以调用 destroy() 来杀死子进程。此 Process 对象所代表的子进程被强制终止。 或者你可以通过在Runtime.exec(...)kill -9 <process id> 中传递taskkill /PID <process id> 来杀死

【讨论】:

  • 我尝试了 destroy() 方法,但它没有关闭命令提示符(进程)。 String myCMD = "cmd.exe /C start c:\\elasticmgmtservice.bat";运行时 rt = Runtime.getRuntime();进程 proc = rt.exec(myCMD); proc.destroy();
  • @sam - 我已经检查过 'cmd.exe /C start mspaint.exe' 与 destroy() 一起工作正常。事实是有一些进程没有响应销毁方法。最好用“taskkill”或“kill”关闭。
  • @Quoi- 当我使用 destroy 方法和 'taskkill' 或 'kill' 运行以下代码时,它不会响应,这意味着当我尝试从进程列表中手动终止时它不会终止进程当我手动终止此进程时显示 java.exe 进程它成功终止。我不明白发生了什么,如果你有任何想法请告诉我。
  • @sam - 我认为这可能是任何其他问题。你可以试试 - Process p = Runtime.getRuntime().exec("cmd.exe /C start mspaint.exe"); p.destroy();如果它不起作用,那么这是其他一些问题。导致上面的代码在我的系统中运行良好。
  • @Quoi-i 试过了,但是当我的 PC 上调用 mspaint 窗口的销毁方法未关闭时,您的那一侧它是否关闭?
【解决方案2】:

在 Windows 中

Runtime rt = Runtime.getRuntime();
rt.exec("taskkill " +<Your process>);

在 Linux 中

Runtime rt = Runtime.getRuntime();
rt.exec("kill -9 " +<Your process>);

【讨论】:

  • 这似乎是个糟糕的主意。使用 Process#destroy() 更可取。
【解决方案3】:

Runtime.exec() 返回一个 Process 对象,它是 exec 方法创建的进程的处理程序。要杀死这个进程,你必须调用Process.destroy();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多