热获取所有 java 运行 进程 PID 在 java?
Hot to get all java running processes PID in java?
我创建了以下代码来获取所有进程的 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);
}
如果你想列出一个进程和它的命令行,进程id在Windows
,这是命令:
wmic process where "name='java.exe'" get ProcessID, CommandLine
相当于Linux
中的“ps -ef | grep java
”。
参考: 改编自 Hung Huynh
的博客 post
输出示例:
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
的博客 post
输出示例:
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
我创建了以下代码来获取所有进程的 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);
}
如果你想列出一个进程和它的命令行,进程id在Windows
,这是命令:
wmic process where "name='java.exe'" get ProcessID, CommandLine
相当于Linux
中的“ps -ef | grep java
”。
参考: 改编自 Hung Huynh
的博客 post输出示例:
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
的博客 post输出示例:
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