Y a-t-il un moyen d'arrêter un programme Java en cours d'exécution à l'aide d'un script shell en connaissant le nom seul.Je utilisez KSH Shell P>
5 Réponses :
Vous pouvez utiliser pkill: Cela fonctionnerait si vous exécutez qu'une seule instance de votre programme est en cours d'exécution. P> p>
Vous pouvez utiliser JPS identifiant l'ID de processus associé au nom du programme Java Démaral (JPS est un gestionnaire de processus pour Java-Programmes). Avec cet identifiant, vous pouvez tuer le processus normalement. P>
En supposant que mon nom de fichier Java est test.java et exécute comment le trouver?
@Harish: Après la compilation et l'exécution, il sera affiché comme «test». Si vous l'emballez dans un jar exécutable (test.jar) et exécutez via 'Java -Jar Test.jar' JPS montre 'test.jar'.
Ajoutez une propriété unique à la JVM pour l'identifier facilement, par ex. Pour test.class pour le tuer: p>
Ça marche bien sous Ksh. Vous avez peut-être fait une erreur de copier la commande.
'grep [u] niquename' est une alternative à 'Grep Uniquename | grep -v grep '
Suivi sur MNEMENTH 'Suggestion :
Ceci devrait faire le travail p> Notez que vous devez exécuter JPS et Xargs avec le même utilisateur (ou racine) que vous exécutez le processus P> P>
JPS -L code>: Liste Java Process avec "Nom complet du package pour la classe principale de l'application ou le nom complet du chemin correspond au fichier JAR de l'application." P> LI>
grep code>: choisissez le processus que vous aimez p> li>
Cut -D - '' -F 1 code>: Sélectionnez la sortie dans les colonnes à l'aide de Delimiter '' et imprimez uniquement le premier (PID) P> LI>
xargs -rn1 kill code>: exécuter tuer pour chaque PID (le cas échéant) p> li>
ul>
Cela fonctionnera également pour les machines Windows, mais vous devrez faire une certaine détection de l'environnement pour déterminer quel tuer code> à utiliser.
@Odelya je viens d'ajouter -r code> (
- no-rude-if-vide code>) sur
xargs code> pour éviter cette erreur.
Vous pouvez utiliser -o option de PS pour formater votre sortie,
ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}'
Savoir quel nom? Si vous connaissez le nom de l'exécutable (qui est normalement
java code> si),
killall code> est votre ami.
@sfussenegger: Il ne veut probablement pas tuer tous les processus Java, mais un seul spécifique.
@MNEYH C'est ce que j'attendais aussi, mais de l'information donnée, c'est la meilleure chose à laquelle je puisse recommander.
Vous voudrez peut-être aussi consulter le démarrage-stop-démon si le processus que vous essayez de tuer est destiné à courir comme un démon