J'ai essayé (et échoué) de le faire il y a quelque temps. J'ai fini par envelopper ma commande dans un script shell qui a vidé le pid dans un fichier. Ce n'est pas la meilleure solution, mais cela m'a permis de surmonter cet obstacle.
Il n'y a toujours pas d'API publique pour cela (voir http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896) mais il existe des solutions de contournement.
Une première solution serait d'utiliser un programme externe comme ps
et de l'appeler en utilisant Runtime.exec()
pour obtenir le pid :)
Une autre est basée sur le fait que le java.lang.Process
la classe est abstraite et que vous obtenez en fait une sous-classe concrète en fonction de votre plate-forme. Sous Linux, vous obtiendrez un java.lang.UnixProcess
qui a un champ privé int pid
. En utilisant la réflexion, vous pouvez facilement obtenir la valeur de ce champ :
Field f = p.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println( f.get( p ) );