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.

25voto

Für ältere JVM, unter Linux...

private static String getPid() throws IOException {
    byte[] bo = new byte[256];
    InputStream is = new FileInputStream("/proc/self/stat");
    is.read(bo);
    for (int i = 0; i < bo.length; i++) {
        if ((bo[i] < '0') || (bo[i] > '9')) {
            return new String(bo, 0, i);
        }
    }
    return "-1";
}

22voto

ZhekaKozlov Punkte 32454

Seit Java 9 gibt es eine Methode Process.getPid(), die die native ID eines Prozesses zurückgibt:

public abstract class Process {

    ...

    public long getPid();
}

Um die Prozess-ID des aktuellen Java-Prozesses zu erhalten, kann man die Funktion ProcessHandle Schnittstelle:

System.out.println(ProcessHandle.current().pid());

18voto

Jez Humble Punkte 189

Sie können sich mein Projekt ansehen: JavaSysMon auf GitHub. Es liefert Prozess-ID und einen Haufen anderer Dinge (CPU-Nutzung, Speichernutzung) plattformübergreifend (derzeit Windows, Mac OSX, Linux und Solaris)

12voto

markus Punkte 2607
java.lang.management.ManagementFactory.getRuntimeMXBean().getName().split("@")[0]

10voto

Florin T. Punkte 188

In Scala:

import sys.process._
val pid: Long = Seq("sh", "-c", "echo $PPID").!!.trim.toLong

Dies sollte Ihnen auf Unix-Systemen eine Umgehung ermöglichen, bis Java 9 veröffentlicht wird. (Ich weiß, die Frage bezog sich auf Java, aber da es keine äquivalente Frage für Scala gibt, wollte ich dies für Scala-Benutzer hinterlassen, die über die gleiche Frage stolpern könnten).

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