【问题标题】:Kill a java process using its Name and not PID使用名称而不是 PID 杀死一个 java 进程
【发布时间】:2014-05-01 22:15:48
【问题描述】:

在我的 java 程序中,我想杀死一个名为“DummyBroker”的进程(这是另一个 java 程序)。我可以使用 TaskKill 杀死它,但它需要进程的 PID。那么如何获取特定 java 进程的 pid 然后杀死它呢?

【问题讨论】:

  • tasklist 将打印所有格式化的进程。您可以使用此输出来搜索正确的进程并获取其 PID。请注意,这仅适用于 Windows,但我想您知道。
  • 作为短期工作,我创建了一个静态Process。使用runtime.exec 启动Java 应用程序并使用p.destroy 终止进程

标签: java windows kill-process


【解决方案1】:

你应该看看这个链接:Killing a process using Java

并使用类似的东西:

Runtime.getRuntime().exec("taskkill /F /IM <processname>.<extension>")

否则,您可以使用tasklistsplit 的组合来查找包含行,然后找到PID

【讨论】:

  • 这个只能通过taskname杀死。所有 java 程序都有 java.exe 作为任务名
  • java进程将被命名为“java.exe”,上面的命令将杀死所有java进程而不是特定的java应用程序(在我的例子中是'com.xxx.java.broker.DummyBroker')
  • 我现在无法尝试,因为我在 Mac 上,但如果没有人同时给你答案,我今晚会尝试给你一个更具体的方法;)
【解决方案2】:

终于找到了一个简单的解决方案here

jps - Java 虚拟机进程状态工具,可以用它的名字杀死一个java进程。

for /f "tokens=1" %i in ('C:\java\jdk-7u45-windows-x64\bin\jps -m ^| find "DummyBroker"') do ( taskkill /F /PID %i )

我们可以在批处理文件中添加上面的内容,只需从java程序中调用批处理文件。

【讨论】:

    【解决方案3】:
    Runtime.getRuntime().exec("taskkill /F /IM " + TASKNAME);
    

    虽然这只会被任务名杀死

    【讨论】:

      【解决方案4】:

      通过此链接...http://www.golesny.de/p/code/javagetpid

      像这样使用java.lang.management.ManagementFactory

      RuntimeMXBean rtb = ManagementFactory.getRuntimeMXBean();
      String processName = rtb.getName();
      int result = 0;
      
      Pattern pattern = Pattern.compile("^([0-9]+)@.+$", Pattern.CASE_INSENSITIVE);
      Matcher matcher = pattern.matcher(processName);
      if (matcher.matches()) {
      result = new Integer(Integer.parseInt(matcher.group(1)));
      }
      

      【讨论】:

        最近更新 更多