使用名称而不是PID杀死java进程

使用名称而不是PID杀死java进程,java,windows,kill-process,Java,Windows,Kill Process,在我的java程序中,我想杀死一个名为“DummyBroker”的进程(这是另一个java程序)。我可以使用TaskKill杀死它,但它需要进程的PID。那么,如何获取特定java进程的pid,然后杀死它呢 Runtime.getRuntime().exec("taskkill /F /IM " + TASKNAME); 虽然这仅按任务名终止,但您应该查看以下链接: 并使用类似于: Runtime.getRuntime().exec(“taskkill/F/IM”) 否则,您可以使用taskl

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

Runtime.getRuntime().exec("taskkill /F /IM " + TASKNAME);

虽然这仅按任务名终止,但您应该查看以下链接:

并使用类似于:

Runtime.getRuntime().exec(“taskkill/F/IM”)

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

浏览此链接

像这样使用
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)));
}

终于找到了一个简单的解决办法

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程序调用批处理文件。

tasklist
将打印所有格式化的进程。您可以使用此输出来搜索正确的进程并获取其PID。请注意,这只适用于Windows,但我想您已经意识到了。相关:作为一项短期工作,我创建了一个静态
进程。使用
runtime.exec
启动java应用程序,并使用
p.destroy
终止进程。这只能通过taskname终止。所有java程序都将java.exe作为任务名java进程将被命名为“java.exe”,上面的命令将杀死所有java进程,而不是特定的java应用程序(在我的例子“com.xxx.java.broker.DummyBroker”)我现在不能尝试,因为我在mac上,但是如果没有人给你一个答案,我今晚会给你一个更具体的方法;)