Ich habe es vor einiger Zeit versucht (und bin gescheitert). Am Ende habe ich meinen Befehl in ein Shell-Skript verpackt, das die PID in eine Datei abgelegt hat. Nicht die beste Lösung, aber es hat mich über diese Hürde gebracht.
Dafür gibt es noch keine öffentliche API (siehe http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896), aber es gibt Workarounds.
Eine erste Problemumgehung wäre die Verwendung eines externen Programms wie ps
und mit Runtime.exec()
aufzurufen um die PID zu bekommen :)
Ein anderer basiert darauf, dass der java.lang.Process
class abstrakt ist und dass Sie abhängig von Ihrer Plattform tatsächlich eine konkrete Unterklasse erhalten. Unter Linux erhalten Sie einen java.lang.UnixProcess
welches ein privates Feld int pid
hat . Mithilfe von Reflektion können Sie den Wert dieses Felds leicht abrufen:
Field f = p.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println( f.get( p ) );