2016-05-13 43 views
2

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

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); 
} 

回答

1

如果要列出一个过程,它的命令行,进程ID在Windows,这是命令:

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

这是“ps -ef | grep java”在Linux等同。

参考:回答适于从输出的Hung Huynh

实施例的博客文章:

CommandLine ProcessId 
java Test 620 

jps输出的实施例:

2312 Jps 
620 Test 

响应更新:

从一个Java应用程序检索进程ID列表,假设你使用Oracle JDK /打开JDK,因为它是特定于太阳/ 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 
+0

谢谢。但我想用java手动获取PID。我自己做的是一个答案,但它需要JDK,因为jps在JDK中。我需要一个更强大的获取PID的方法 – SSD

+0

我需要的不仅仅是PID。我想知道哪个PID属于哪个Java进程,我的意思不仅是java.exe,而且是全进程名称 – SSD

+0

请运行我的代码以查看我实际上的意思 – SSD

相关问题