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