Est-ce que quelqu'un sait comment obtenir les fenêtres ou processus ouverts actuels d'une machine locale en utilisant Java?
Ce que j'essaie de faire est de: lister la tâche ouverte actuelle, les fenêtres ou le processus ouverts, comme dans Windows Taskmanager, mais en utilisant une approche multi-plateforme - en utilisant uniquement Java si c'est possible.
tasklist.exe /fo csv /nh
pour obtenir la liste au format CSV, c'est beaucoup plus facile à analyser.ps -elf | grep java
ne retournera rien, maisps -elf
fonctionnerait comme prévu.(.exec (Runtime/getRuntime) "tasklist"))
(dans Clojure, à l'aide de Java-interop) renvoie correctement letasklist
processus, même sans spécifier de répertoire.Enfin, avec Java 9+, il est possible avec
ProcessHandle
:Production:
la source
java.lang
donc aucune importation nécessaireSous Windows, il existe une alternative utilisant JNA :
la source
GetModuleFileName
. Voir stackoverflow.com/questions/7521693/… pour un exemple.WMIC PROCESS
ou pour limiter la sortie d'un processus spécifique:WMIC PROCESS WHERE name='theName'
. Vous pouvez utiliser d'autres filtres pour limiter la sortie si nécessaire. La ligne de commande est incluse dans la colonne CommandLine du tableau renvoyé (= 2e colonne)La seule façon dont je peux penser à le faire est d'appeler une application de ligne de commande qui fait le travail pour vous, puis de capturer la sortie (comme ps de Linux et la liste des tâches de Windows).
Malheureusement, cela signifie que vous devrez écrire des routines d'analyse pour lire les données des deux.
la source
tasklist
programme peut être configuré pour sortir CSV :)YAJSW (Yet Another Java Service Wrapper) semble avoir des implémentations basées sur JNA de son interface org.rzo.yajsw.os.TaskList pour win32, linux, bsd et solaris et est sous une licence LGPL. Je n'ai pas essayé d'appeler ce code directement, mais YAJSW fonctionne très bien lorsque je l'ai utilisé dans le passé, vous ne devriez donc pas avoir trop de soucis.
la source
Vous pouvez facilement récupérer la liste des processus en cours à l'aide de jProcesses
la source
Il n'y a pas de moyen neutre de faire cela. Dans la version 1.6 de Java, une classe " Desktop " a été ajoutée pour permettre des moyens portables de parcourir, modifier, envoyer, ouvrir et imprimer les URI. Il est possible que cette classe soit un jour étendue pour supporter des processus, mais j'en doute.
Si vous n'êtes curieux que des processus Java, vous pouvez utiliser l' API java.lang.management pour obtenir des informations sur les threads / mémoire sur la JVM.
la source
Pour Windows, j'utilise ce qui suit:
la source
Cela peut être utile pour les applications avec un JRE fourni: je scanne le nom du dossier à partir duquel j'exécute l'application: donc si votre application est en cours d'exécution à partir de:
alors vous pouvez trouver s'il fonctionne déjà dans J9, en:
la source
Utiliser du code pour analyser
ps aux
Linux ettasklist
Windows est votre meilleure option, jusqu'à ce que quelque chose de plus général arrive.Pour Windows, vous pouvez consulter: http://www.rgagnon.com/javadetails/java-0593.html
Linux peut tuyau les résultats de
ps aux
pargrep
trop, ce qui rendrait le traitement / la recherche rapide et facile. Je suis sûr que vous pouvez également trouver quelque chose de similaire pour Windows.la source
Le programme ci-dessous sera compatible avec Java 9+ uniquement version ...
Pour obtenir les informations CurrentProcess,
Pour tous les processus en cours,
la source
Nous devons utiliser
process.getOutputStream.close()
sinon il sera verrouillé en boucle while.la source
la source
Ceci est mon code pour une fonction qui récupère les tâches et obtient leurs noms, en les ajoutant également dans une liste accessible à partir d'une liste. Il crée des fichiers temporaires avec les données, lit les fichiers et obtient le nom de la tâche avec le suffixe .exe, et organise les fichiers à supprimer lorsque le programme est sorti avec System.exit (0), il masque également les processus utilisés pour obtenir les tâches et aussi java.exe afin que l'utilisateur ne puisse pas accidentellement tuer le processus qui exécute le programme tous ensemble.
la source