Intenté (y fallé) hacer esto hace un tiempo. Terminé envolviendo mi comando en un script de shell que descargó el pid en un archivo. No es la mejor solución, pero superé este obstáculo.
Todavía no hay una API pública para esto (consulte http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896), pero existen soluciones alternativas.
Una primera solución sería usar un programa externo como ps
y llamarlo usando Runtime.exec()
para obtener el pid :)
Otro se basa en el hecho de que el java.lang.Process
class es abstracto y que en realidad obtienes una subclase concreta dependiendo de tu plataforma. En Linux, obtendrá un java.lang.UnixProcess
que tiene un campo privado int pid
. Usando la reflexión, puede obtener fácilmente el valor de este campo:
Field f = p.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println( f.get( p ) );