GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir l'identifiant du sous-processus en Java

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

Linux
  1. Documentation ObjectRocket

  2. Comment obtenir le chemin d'un processus sous Unix / Linux

  3. Existe-t-il un moyen d'obtenir l'UID de l'utilisateur sur une machine Linux en utilisant Java ?

  4. Tuer le sous-processus démarré par sudo en python

  5. Comment obtenir le pid du processus qui vient de démarrer

Comment installer Java sur Linux

Comment vérifier la version Java

Comment obtenir le PID par nom de processus ?

Comment puis-je obtenir le dossier temporaire d'une machine exécutant maven?

Comment obtenir le PID parent d'un processus donné sous GNU/Linux à partir de la ligne de commande ?

Comment obtenir le pid d'un processus et invoquer kill -9 dessus dans le script shell ?