2016-05-13 9 views
2

Ich habe den folgenden Code erstellt, um PIDs aller Prozesse zu erhalten. Aber es scheint, dass JREjps nicht enthält und ich sollte JDK installieren, wann immer ich diesen Code verwenden möchte. Weiß jemand, wie man alle PIDs aller laufenden java Prozesse in Java und nicht manuell statt meiner Lösung erhält?Hot, alle Java laufenden Prozesse PID in Java zu bekommen?

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

Antwort

1

Wenn Sie einen Prozess und seine Befehlszeile, Prozess-ID in Windows auflisten möchten, ist dies der Befehl:

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

, dass das Äquivalent von "ps -ef | grep java" in Linux ist.

Referenz: angepasst Antwort aus dem Blog-Post von Hung Huynh

Ausgabebeispiel:

CommandLine ProcessId 
java Test 620 

Beispiel für Ausgabe mit jps:

2312 Jps 
620 Test 
Aktualisieren Antwort:

Um die Liste des Prozess-IDs aus einer Java-Anwendung abrufen, davon aus, dass Sie verwenden eine Oracle JDK/Open JDK wie es spezifisch zu Sun/Oracle, kann es als nächstes getan werden:

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

Referenz: Antwort aus dem Blog angepasst Posten des Vaibhav Choudhary

Ausgabebeispiel:

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

Dank. aber ich möchte PIDs in Java nicht manuell abrufen. Was ich selbst gemacht habe, ist eine Antwort, aber es benötigt JDK, weil jps in JDK ist. Ich brauche eine robustere Methode, PIDs zu bekommen. – SSD

+0

Was ich brauche, sind nicht nur die PIDs. Ich möchte wissen, welche PID gehören zu dem Java-Prozess meine ich nicht nur java.exe aber die volle Prozessnamen – SSD

+0

Bitte führen Sie meinen Code, um zu sehen, was ich meine tatsächlich – SSD