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.
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.
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";
}
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());
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)
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 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.