423 Stimmen

Wie kann ein Java-Programm seine eigene Prozess-ID erhalten?

Wie erhalte ich die Kennung meines Java-Prozesses?

Ich weiß, dass es mehrere plattformabhängige Hacks gibt, aber ich würde eine allgemeinere Lösung vorziehen.

4voto

Ryan P Punkte 6261

Es kommt darauf an, woher Sie die Informationen beziehen wollen.

Wenn Sie die Informationen über die Konsole abrufen möchten, können Sie den Befehl jps verwenden. Der Befehl gibt eine ähnliche Ausgabe wie der Unix-Befehl ps und wird mit dem JDK seit glaube ich 1.5 ausgeliefert

Wenn Sie vom Prozess aus suchen, ist die RuntimeMXBean (wie von Wouter Coekaerts erwähnt) wahrscheinlich die beste Wahl. Die Ausgabe von getName() unter Windows mit Sun JDK 1.6 u7 erfolgt in der Form [PROCESS_ID]@[MACHINE_NAME]. Sie könnten jedoch versuchen, jps auszuführen und das Ergebnis daraus zu parsen:

String jps = [JDK HOME] + "\\bin\\jps.exe";
Process p = Runtime.getRuntime().exec(jps);

Bei Ausführung ohne Optionen sollte die Ausgabe die Prozess-ID gefolgt vom Namen sein.

2voto

tomsv Punkte 7007

Basierend auf Ashwin Jayaprakashs réponse (+1) über den Apache 2.0 lizenziert SIGAR Hier ist, wie ich es verwende, um nur die PID des aktuellen Prozesses zu erhalten:

import org.hyperic.sigar.Sigar;

Sigar sigar = new Sigar();
long pid = sigar.getPid();
sigar.close();

Auch wenn es nicht auf allen Plattformen funktioniert, so funktioniert es doch auf Linux, Windows, OS X und verschiedene Unix-Plattformen wie hier aufgeführt .

2voto

Brandon Heck Punkte 81

Ich weiß, dies ist ein alter Thread, aber ich wollte darauf hinweisen, dass die API zum Abrufen der PID (sowie andere Manipulationen des Java-Prozesses zur Laufzeit) der Klasse Process in JDK 9 hinzugefügt wird: http://openjdk.java.net/jeps/102

1voto

kervin Punkte 11462

Sie können versuchen getpid() sur JNR-Posix .

Es hat einen Windows-POSIX-Wrapper, der getpid() von libc aufruft.

0voto

Armin Bu Punkte 1280

Ich habe eine Lösung gefunden, die vielleicht ein bisschen abwegig ist und ich habe sie nicht auf anderen Betriebssystemen als Windows 10 ausprobiert, aber ich denke, sie ist es wert, erwähnt zu werden.

Wenn Sie mit folgenden Themen arbeiten J2V8 und nodejs können Sie eine einfache Javascript-Funktion ausführen, die Ihnen die PID des Java-Prozesses zurückgibt.

Hier ist ein Beispiel:

public static void main(String[] args) {
    NodeJS nodeJS = NodeJS.createNodeJS();
    int pid = nodeJS.getRuntime().executeIntegerScript("process.pid;\n");
    System.out.println(pid);
    nodeJS.release();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X