【问题标题】:Hot to get all java running processes PID in java?在java中获取所有java运行进程PID很热吗?
【发布时间】:2016-09-09 22:25:08
【问题描述】:

我创建了以下代码来获取所有进程的 PID。但似乎JRE 不包括jps,每当我想使用此代码时,我都应该安装JDK。有谁知道如何在java中获取所有正在运行的java进程中的所有PIDs,而不是手动而不是我的解决方案?

rt.exec("cmd.exe /k \"C:\\Program Files\\Java\\jdk1.8.0_73\\bin\\jps.exe\"");
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String line = null;

while (true) {
    if (bufferedreader.ready())
        line = bufferedreader.readLine();
    else
        break;
    if (line == null || line.equals(""))
        break;
    System.out.println(line);
}

【问题讨论】:

  • 为什么不用windows任务管理器?如果您没有看到,请按照以下步骤操作: 1. 按键盘上的 Ctrl、Shift、Esc 组合。 2. 在 Windows 任务管理器窗口中,转到进程选项卡。 3. 在菜单中,点击查看 -> 选择列。

标签: java windows process pid


【解决方案1】:

如果你想列出一个进程和它的命令行,进程id在Windows,这个是命令:

wmic process where "name='java.exe'" get ProcessID, CommandLine

这相当于Linux中的“ps -ef | grep java”。

参考:答案改编自Hung Huynh的博文

输出示例:

CommandLine  ProcessId
java  Test   620

jps 的输出示例:

2312 Jps
620 Test

回复更新:

要从 Java 应用程序中检索进程 ID 列表,假设您使用 Oracle JDK/Open JDK,因为它是特定于 Sun/Oracle 的,可以按以下方式完成:

// Checking for local Host, one can do for remote machine as well
MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");
// Take all active VM's on Host, LocalHost here
Set<Integer> vmlist = new HashSet<>(local.activeVms());
for (Integer id : vmlist) {
    // 1234 - Specifies the Java Virtual Machine identified by lvmid 1234 
    // on an unnamed host. This string is transformed into the absolute 
    // form //1234, which must be resolved against a HostIdentifier.
    MonitoredVm vm = local.getMonitoredVm(new VmIdentifier(String.format("//%d", id)));
    // take care of class file and jar file both
    String processname = MonitoredVmUtil.mainClass(vm, true);
    System.out.printf("%d: %s%n", id, processname);
}

参考:答案改编自Vaibhav Choudhary的博文

输出示例:

88083: com.intellij.rt.execution.application.AppMain
88082: org.jetbrains.jps.cmdline.Launcher
82789: org.jetbrains.idea.maven.server.RemoteMavenServer
87892: sun.tools.jconsole.JConsole

【讨论】:

  • 谢谢。但我想不手动获取java中的PID。我自己做的是一个答案,但它需要 JDK,因为 jps 在 JDK 中。我需要一种更强大的获取 PID 的方法
  • 我需要的不仅仅是 PID。我想知道哪个PID属于哪个Java进程我的意思不仅是java.exe,还有完整的进程名
  • 如果您运行位于 JDK 的 bin 文件夹中的 jps,它会显示 java 进程的名称及其 PID。进程的名称很重要。基于此,我想杀死其中一个进程。
  • 是的。无论你运行 Windows 还是 MAC 或 Linux jps 都位于 JDK 中。运行它
  • 我并不是说不尊重。我很惊讶我的哪个cmets不尊重。我说我需要的是另一种获取 PID 的方法。如果您查看我的问题,我说我已经可以获得 PID,但我正在寻找另一种更强大的方法。
猜你喜欢
  • 2011-04-28
  • 1970-01-01
  • 2011-05-20
  • 2015-01-09
  • 2013-01-07
  • 2014-07-11
  • 2017-08-13
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多