Surveillance de processus Windows avec Java

Résolu
Signaler
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
-
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
-
Salut à tous,
Je souhaiterai pouvoir, avec java, vérifier si un processus windows a été lancé ou non.Malgré mes recherches, la seule piste que j'ai est l'API WIN32, mais je ne sais pas du tout l'utiliser, et aucun des exemples proposés avec la doc ne m'aide. Quelqu'un a une idée? (Avec cette API ou une autre méthode, peu importe)

Merci beaucoup

@+. Hermios

9 réponses

Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
T'inquiètes c'est tout simple.

D'abord tu vas lancer la commander, c'est un process :

Process p = Runtime.getRuntime.exec("tasklist");
// maintenant affichage du résultat
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStreamReader());
String ligne;

while ((ligne = b.readLine()) != null ) {
   System.out.println(ligne);
}
// voilà ça t'affiche tous les processus qui sont lancés

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Salut,

Alors, je ne connais pas cette API, mais il me semble logique que tu regardes du côté de JNI (Java Native Interface)

http://www.hex.ro/wb/pages/projects/java-jni-tutorial.php

Jettes un oeil à ce lien, ça parle de PID... ça devrait pourvoir le faire je pense,

Bonne chance

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
Salut Dvoraky,
Tout d'abord, merci beaucoup de ta réponse rapide.
Malheureusement, ce n'est pas ce que je cherche : les process que je veux observer (et juste observer, sans avoir à y toucher) sont de tous types, et pas seulement (pas du tout en l'occurence!) des process java. Par exemple, je voudrai pouvoir voir si un serveur svn local a été lancé ou non (nom du process : svnserve.exe).
En gros, si j'ouvre le task manager de windows, je veux pouvoirrécupérer la liste de tous les éléments de l'onglet "Processus". Ou alors, à partir du nom d'un processus (donc svnserve.exe pour notre exemple, mais je souhaite un cas général), savoir s'il est lancé ou non.
Merci

@+. Hermios
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Re-salut,

T'as pas qu'à être sous windows aussi!!! Avec Linux, tu pourrais lancer une commande système et récupérer l'occurence de svnserve s'il existe...

Enfin bref, je sais pas trop, tu as jetté un oeil à la technologie JNI? Parce qu'il me semble pas que ça puisse regarder uniquement les process Java mais tous les process système...

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Est ce que tu veux faire un programme portable multi-plateforme? Ou uniquement sous windaube?

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
Oui, je sais, windows c'est pas bien, mais Linux, j'ai jamais compris comment ca marche(déjà que windows, chuis pas très doué!!!). Donc non, mon projet est uniquement sous windaube, pas de multi plateforme.
Pour JNI, j'ai regaré ton lien, mais il ne parle que process java (c'est même dans le titre!). Je vais voir plus avant, mais je préfère ne pas encore mettre réponse acceptée, car j'ai des doutes. Merci beaucoup de ton aide en tout cas.

@+. Hermios
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Bon alors si tu veux tu peux lancer une commande système windaube

Dans ta "ligne de commande" windows, tape "tasklist" et ça te récupère tous les processus lancés...
Je pense que si tu récupères le résultat de la commande tasklist dans ton programme Java, ensuite, il te suffit de chercher s'il y a svnserve et voilou

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
Hum, ca, ca me plait. Une dernière question (Promis après j'arrête!) : Comment je peux récupérer cette liste!!! Runtime.getruntime() renvoie un process, non? Merci

@+. Hermios
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
C'est exactement ce qu'il me fallait. Une petite correction :
p.getInputStream() (le reader était en trop). Merci beaucoup en tout
cas.

@+. Hermios