Ho provato (e fallito) a farlo qualche tempo fa. Ho finito per avvolgere il mio comando in uno script di shell che ha scaricato il pid in un file. Non è la soluzione migliore, ma mi ha permesso di superare questo ostacolo.
Non esiste ancora un'API pubblica per questo (vedi http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896) ma ci sono soluzioni alternative.
Una prima soluzione sarebbe usare un programma esterno come ps
e chiamarlo usando Runtime.exec()
per ottenere il pid :)
Un altro si basa sul fatto che il java.lang.Process
class è astratta e che in realtà ottieni una sottoclasse concreta a seconda della tua piattaforma. Su Linux, otterrai un java.lang.UnixProcess
che ha un campo privato int pid
. Usando la riflessione, puoi facilmente ottenere il valore di questo campo:
Field f = p.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println( f.get( p ) );